11c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil/* 21c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * cx18 System Control Block initialization 31c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * 41c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * Copyright (C) 2007 Hans Verkuil <hverkuil@xs4all.nl> 56afdeaf865b729287e02aafc61d8d013b89996efAndy Walls * Copyright (C) 2008 Andy Walls <awalls@md.metrocast.net> 61c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * 71c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * This program is free software; you can redistribute it and/or modify 81c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * it under the terms of the GNU General Public License as published by 91c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * the Free Software Foundation; either version 2 of the License, or 101c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * (at your option) any later version. 111c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * 121c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * This program is distributed in the hope that it will be useful, 131c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * but WITHOUT ANY WARRANTY; without even the implied warranty of 141c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 151c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * GNU General Public License for more details. 161c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * 171c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * You should have received a copy of the GNU General Public License 181c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * along with this program; if not, write to the Free Software 191c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 201c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil * 02111-1307 USA 211c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil */ 221c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil 231c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil#include "cx18-driver.h" 24b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls#include "cx18-io.h" 251c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil#include "cx18-scb.h" 261c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil 271c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuilvoid cx18_init_scb(struct cx18 *cx) 281c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil{ 29b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_setup_page(cx, SCB_OFFSET); 30b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_memset_io(cx, cx->scb, 0, 0x10000); 311c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil 32b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_APU_TO_CPU, &cx->scb->apu2cpu_irq); 33b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_CPU_TO_APU_ACK, &cx->scb->cpu2apu_irq_ack); 34b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_HPU_TO_CPU, &cx->scb->hpu2cpu_irq); 35b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_CPU_TO_HPU_ACK, &cx->scb->cpu2hpu_irq_ack); 36b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_PPU_TO_CPU, &cx->scb->ppu2cpu_irq); 37b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_CPU_TO_PPU_ACK, &cx->scb->cpu2ppu_irq_ack); 38b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_EPU_TO_CPU, &cx->scb->epu2cpu_irq); 39b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_CPU_TO_EPU_ACK, &cx->scb->cpu2epu_irq_ack); 401c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil 41b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_CPU_TO_APU, &cx->scb->cpu2apu_irq); 42b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_APU_TO_CPU_ACK, &cx->scb->apu2cpu_irq_ack); 43b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_HPU_TO_APU, &cx->scb->hpu2apu_irq); 44b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_APU_TO_HPU_ACK, &cx->scb->apu2hpu_irq_ack); 45b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_PPU_TO_APU, &cx->scb->ppu2apu_irq); 46b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_APU_TO_PPU_ACK, &cx->scb->apu2ppu_irq_ack); 47b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_EPU_TO_APU, &cx->scb->epu2apu_irq); 48b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_APU_TO_EPU_ACK, &cx->scb->apu2epu_irq_ack); 491c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil 50b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_CPU_TO_HPU, &cx->scb->cpu2hpu_irq); 51b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_HPU_TO_CPU_ACK, &cx->scb->hpu2cpu_irq_ack); 52b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_APU_TO_HPU, &cx->scb->apu2hpu_irq); 53b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_HPU_TO_APU_ACK, &cx->scb->hpu2apu_irq_ack); 54b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_PPU_TO_HPU, &cx->scb->ppu2hpu_irq); 55b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_HPU_TO_PPU_ACK, &cx->scb->hpu2ppu_irq_ack); 56b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_EPU_TO_HPU, &cx->scb->epu2hpu_irq); 57b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_HPU_TO_EPU_ACK, &cx->scb->hpu2epu_irq_ack); 581c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil 59b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_CPU_TO_PPU, &cx->scb->cpu2ppu_irq); 60b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_PPU_TO_CPU_ACK, &cx->scb->ppu2cpu_irq_ack); 61b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_APU_TO_PPU, &cx->scb->apu2ppu_irq); 62b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_PPU_TO_APU_ACK, &cx->scb->ppu2apu_irq_ack); 63b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_HPU_TO_PPU, &cx->scb->hpu2ppu_irq); 64b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_PPU_TO_HPU_ACK, &cx->scb->ppu2hpu_irq_ack); 65b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_EPU_TO_PPU, &cx->scb->epu2ppu_irq); 66b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_PPU_TO_EPU_ACK, &cx->scb->ppu2epu_irq_ack); 671c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil 68b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_CPU_TO_EPU, &cx->scb->cpu2epu_irq); 69b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_EPU_TO_CPU_ACK, &cx->scb->epu2cpu_irq_ack); 70b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_APU_TO_EPU, &cx->scb->apu2epu_irq); 71b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_EPU_TO_APU_ACK, &cx->scb->epu2apu_irq_ack); 72b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_HPU_TO_EPU, &cx->scb->hpu2epu_irq); 73b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_EPU_TO_HPU_ACK, &cx->scb->epu2hpu_irq_ack); 74b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_PPU_TO_EPU, &cx->scb->ppu2epu_irq); 75b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, IRQ_EPU_TO_PPU_ACK, &cx->scb->epu2ppu_irq_ack); 761c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil 77b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2cpu_mb), 781c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->apu2cpu_mb_offset); 79b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2cpu_mb), 801c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->hpu2cpu_mb_offset); 81b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2cpu_mb), 821c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->ppu2cpu_mb_offset); 83b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2cpu_mb), 841c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->epu2cpu_mb_offset); 85b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2apu_mb), 861c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->cpu2apu_mb_offset); 87b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2apu_mb), 881c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->hpu2apu_mb_offset); 89b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2apu_mb), 901c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->ppu2apu_mb_offset); 91b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2apu_mb), 921c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->epu2apu_mb_offset); 93b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2hpu_mb), 941c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->cpu2hpu_mb_offset); 95b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2hpu_mb), 961c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->apu2hpu_mb_offset); 97b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2hpu_mb), 981c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->ppu2hpu_mb_offset); 99b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2hpu_mb), 1001c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->epu2hpu_mb_offset); 101b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2ppu_mb), 1021c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->cpu2ppu_mb_offset); 103b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2ppu_mb), 1041c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->apu2ppu_mb_offset); 105b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2ppu_mb), 1061c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->hpu2ppu_mb_offset); 107b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, epu2ppu_mb), 1081c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->epu2ppu_mb_offset); 109b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu2epu_mb), 1101c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->cpu2epu_mb_offset); 111b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, apu2epu_mb), 1121c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->apu2epu_mb_offset); 113b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, hpu2epu_mb), 1141c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->hpu2epu_mb_offset); 115b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, ppu2epu_mb), 1161c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->ppu2epu_mb_offset); 1171c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil 118b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, SCB_OFFSET + offsetof(struct cx18_scb, cpu_state), 1191c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil &cx->scb->ipc_offset); 1201c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil 121b1526421eac9a912b2cda7e147f1da2aa31be278Andy Walls cx18_writel(cx, 1, &cx->scb->epu_state); 1221c1e45d17b663d4749af456ab7c2fc1f36405ef8Hans Verkuil} 123