17d8ccad7SMarcel Moolenaar /*- 27d8ccad7SMarcel Moolenaar * Copyright (c) 2008 Nathan Whitehorn 37d8ccad7SMarcel Moolenaar * All rights reserved 47d8ccad7SMarcel Moolenaar * 57d8ccad7SMarcel Moolenaar * Redistribution and use in source and binary forms, with or without 67d8ccad7SMarcel Moolenaar * modification, are permitted provided that the following conditions 77d8ccad7SMarcel Moolenaar * are met: 87d8ccad7SMarcel Moolenaar * 1. Redistributions of source code must retain the above copyright 97d8ccad7SMarcel Moolenaar * notice, this list of conditions and the following disclaimer. 107d8ccad7SMarcel Moolenaar * 2. Redistributions in binary form must reproduce the above copyright 117d8ccad7SMarcel Moolenaar * notice, this list of conditions and the following disclaimer in the 127d8ccad7SMarcel Moolenaar * documentation and/or other materials provided with the distribution. 137d8ccad7SMarcel Moolenaar * 147d8ccad7SMarcel Moolenaar * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 157d8ccad7SMarcel Moolenaar * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 167d8ccad7SMarcel Moolenaar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 177d8ccad7SMarcel Moolenaar * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 187d8ccad7SMarcel Moolenaar * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 197d8ccad7SMarcel Moolenaar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 207d8ccad7SMarcel Moolenaar * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 217d8ccad7SMarcel Moolenaar * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 227d8ccad7SMarcel Moolenaar * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 237d8ccad7SMarcel Moolenaar * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 247d8ccad7SMarcel Moolenaar * SUCH DAMAGE. 257d8ccad7SMarcel Moolenaar * 267d8ccad7SMarcel Moolenaar * $FreeBSD$ 277d8ccad7SMarcel Moolenaar */ 287d8ccad7SMarcel Moolenaar 297d8ccad7SMarcel Moolenaar #ifndef _POWERPC_POWERMAC_DBDMAVAR_H_ 307d8ccad7SMarcel Moolenaar #define _POWERPC_POWERMAC_DBDMAVAR_H_ 317d8ccad7SMarcel Moolenaar 327d8ccad7SMarcel Moolenaar struct dbdma_command { 337d8ccad7SMarcel Moolenaar uint8_t cmd:4; /* DBDMA command */ 347d8ccad7SMarcel Moolenaar 357d8ccad7SMarcel Moolenaar uint8_t _resd1:1; 367d8ccad7SMarcel Moolenaar uint8_t key:3; /* Stream number, or 6 for KEY_SYSTEM */ 377d8ccad7SMarcel Moolenaar uint8_t _resd2:2; 387d8ccad7SMarcel Moolenaar 397d8ccad7SMarcel Moolenaar /* Interrupt, branch, and wait flags */ 407d8ccad7SMarcel Moolenaar uint8_t intr:2; 417d8ccad7SMarcel Moolenaar uint8_t branch:2; 427d8ccad7SMarcel Moolenaar uint8_t wait:2; 437d8ccad7SMarcel Moolenaar 447d8ccad7SMarcel Moolenaar uint16_t reqCount; /* Bytes to transfer */ 457d8ccad7SMarcel Moolenaar 467d8ccad7SMarcel Moolenaar uint32_t address; /* 32-bit system physical address */ 477d8ccad7SMarcel Moolenaar uint32_t cmdDep; /* Branch address or quad word to load/store */ 487d8ccad7SMarcel Moolenaar 497d8ccad7SMarcel Moolenaar uint16_t xferStatus; /* Contents of channel status after completion */ 507d8ccad7SMarcel Moolenaar uint16_t resCount; /* Number of residual bytes outstanding */ 517d8ccad7SMarcel Moolenaar }; 527d8ccad7SMarcel Moolenaar 537d8ccad7SMarcel Moolenaar struct dbdma_channel { 54f1dea04aSNathan Whitehorn struct resource *sc_regs; 55f1dea04aSNathan Whitehorn u_int sc_off; 567d8ccad7SMarcel Moolenaar 577d8ccad7SMarcel Moolenaar struct dbdma_command *sc_slots; 587d8ccad7SMarcel Moolenaar int sc_nslots; 597d8ccad7SMarcel Moolenaar bus_addr_t sc_slots_pa; 607d8ccad7SMarcel Moolenaar 617d8ccad7SMarcel Moolenaar bus_dma_tag_t sc_dmatag; 627d8ccad7SMarcel Moolenaar bus_dmamap_t sc_dmamap; 63*cab8300eSJustin Hibbits uint32_t sc_saved_regs[5]; 647d8ccad7SMarcel Moolenaar }; 657d8ccad7SMarcel Moolenaar 667d8ccad7SMarcel Moolenaar 677d8ccad7SMarcel Moolenaar /* 687d8ccad7SMarcel Moolenaar DBDMA registers are found at 0x8000 + n*0x100 in the macio register space, 697d8ccad7SMarcel Moolenaar and are laid out as follows within each block: 707d8ccad7SMarcel Moolenaar 717d8ccad7SMarcel Moolenaar Address: Description: Length (bytes): 727d8ccad7SMarcel Moolenaar 0x000 Channel Control 4 737d8ccad7SMarcel Moolenaar 0x004 Channel Status 4 747d8ccad7SMarcel Moolenaar 0x00C Command Phys Addr 4 757d8ccad7SMarcel Moolenaar 0x010 Interrupt Select 4 767d8ccad7SMarcel Moolenaar 0x014 Branch Select 4 777d8ccad7SMarcel Moolenaar 0x018 Wait Select 4 787d8ccad7SMarcel Moolenaar */ 797d8ccad7SMarcel Moolenaar 807d8ccad7SMarcel Moolenaar #define CHAN_CONTROL_REG 0x00 817d8ccad7SMarcel Moolenaar #define CHAN_STATUS_REG 0x04 82f1dea04aSNathan Whitehorn #define CHAN_CMDPTR_HI 0x08 837d8ccad7SMarcel Moolenaar #define CHAN_CMDPTR 0x0C 847d8ccad7SMarcel Moolenaar #define CHAN_INTR_SELECT 0x10 857d8ccad7SMarcel Moolenaar #define CHAN_BRANCH_SELECT 0x14 867d8ccad7SMarcel Moolenaar #define CHAN_WAIT_SELECT 0x18 877d8ccad7SMarcel Moolenaar 887d8ccad7SMarcel Moolenaar /* Channel control is the write channel to channel status, the upper 16 bits 897d8ccad7SMarcel Moolenaar are a mask of which bytes to change */ 907d8ccad7SMarcel Moolenaar 914a8c1391SNathan Whitehorn #define DBDMA_REG_MASK_SHIFT 16 924a8c1391SNathan Whitehorn 937d8ccad7SMarcel Moolenaar /* Status bits 0-7 are device dependent status bits */ 947d8ccad7SMarcel Moolenaar 957d8ccad7SMarcel Moolenaar /* 967d8ccad7SMarcel Moolenaar The Interrupt/Branch/Wait Select triggers the corresponding condition bits 977d8ccad7SMarcel Moolenaar in the event that (select.mask & device dependent status) == select.value 987d8ccad7SMarcel Moolenaar 997d8ccad7SMarcel Moolenaar They are defined a follows: 1007d8ccad7SMarcel Moolenaar Byte 1: Reserved 1017d8ccad7SMarcel Moolenaar Byte 2: Mask 1027d8ccad7SMarcel Moolenaar Byte 3: Reserved 1037d8ccad7SMarcel Moolenaar Byte 4: Value 1047d8ccad7SMarcel Moolenaar */ 1057d8ccad7SMarcel Moolenaar 1067d8ccad7SMarcel Moolenaar #endif /* _POWERPC_POWERMAC_DBDMAVAR_H_ */ 107