1176868Srink/*- 2176868Srink * Copyright (c) 2006-2007 Daniel Roethlisberger <daniel@roe.ch> 3176868Srink * All rights reserved. 4176868Srink * 5176868Srink * Redistribution and use in source and binary forms, with or without 6176868Srink * modification, are permitted provided that the following conditions 7176868Srink * are met: 8176868Srink * 1. Redistributions of source code must retain the above copyright 9176868Srink * notice, this list of conditions and the following disclaimer. 10176868Srink * 2. Redistributions in binary form must reproduce the above copyright 11176868Srink * notice, this list of conditions and the following disclaimer in the 12176868Srink * documentation and/or other materials provided with the distribution. 13176868Srink * 14176868Srink * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15176868Srink * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16176868Srink * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17176868Srink * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18176868Srink * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19176868Srink * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20176868Srink * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21176868Srink * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22176868Srink * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23176868Srink * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24176868Srink * SUCH DAMAGE. 25176868Srink * 26176868Srink * $FreeBSD: releng/10.3/sys/dev/cmx/cmxvar.h 176868 2008-03-06 08:09:45Z rink $ 27176868Srink */ 28176868Srink 29176868Srink/*#define CMX_DEBUG*/ 30176868Srink/*#define CMX_INTR*/ 31176868Srink 32176868Srink#define CMX_MIN_RDLEN 10 /* min read length */ 33176868Srink#define CMX_MIN_WRLEN 5 /* min write length */ 34176868Srink#define CMX_BUFSZ 512 /* I/O block size */ 35176868Srink 36176868Srinkstruct cmx_softc { 37176868Srink device_t dev; /* pccard device */ 38176868Srink struct cdev *cdev; /* character device */ 39176868Srink 40176868Srink struct resource *ioport; /* io port resource descriptor */ 41176868Srink int ioport_rid; /* io port resource identification */ 42176868Srink 43176868Srink bus_space_tag_t bst; /* bus space tag */ 44176868Srink bus_space_handle_t bsh; /* bus space handle */ 45176868Srink 46176868Srink#ifdef CMX_INTR 47176868Srink struct resource* irq; /* irq resource descriptor */ 48176868Srink int irq_rid; /* irq resource identification */ 49176868Srink void *ih; /* intr handle */ 50176868Srink#endif 51176868Srink 52176868Srink struct mtx mtx; /* per-unit lock */ 53176868Srink struct callout ch; /* callout handle */ 54176868Srink struct selinfo sel; /* select/poll queue handle */ 55176868Srink 56176868Srink int open; /* is chardev open? */ 57176868Srink int polling; /* are we polling? */ 58176868Srink int dying; /* are we detaching? */ 59176868Srink 60176868Srink unsigned long timeout; /* response timeout */ 61176868Srink 62176868Srink uint8_t buf[CMX_BUFSZ]; /* read/write buffer */ 63176868Srink}; 64176868Srink 65176868Srinkextern devclass_t cmx_devclass; 66176868Srink 67176868Srinkvoid cmx_init_softc(device_t); 68176868Srinkint cmx_alloc_resources(device_t); 69176868Srinkvoid cmx_release_resources(device_t); 70176868Srinkint cmx_attach(device_t); 71176868Srinkint cmx_detach(device_t); 72176868Srink 73176868Srink#define CMX_READ_1(sc, off) \ 74176868Srink (bus_space_read_1((sc)->bst, (sc)->bsh, off)) 75176868Srink#define CMX_WRITE_1(sc, off, val) \ 76176868Srink (bus_space_write_1((sc)->bst, (sc)->bsh, off, val)) 77176868Srink 78176868Srink#define cmx_read_BSR(sc) \ 79176868Srink CMX_READ_1(sc, REG_OFFSET_BSR) 80176868Srink#define cmx_write_BSR(sc, val) \ 81176868Srink CMX_WRITE_1(sc, REG_OFFSET_BSR, val) 82176868Srink#define cmx_read_SCR(sc) \ 83176868Srink CMX_READ_1(sc, REG_OFFSET_SCR) 84176868Srink#define cmx_write_SCR(sc, val) \ 85176868Srink CMX_WRITE_1(sc, REG_OFFSET_SCR, val) 86176868Srink#define cmx_read_DTR(sc) \ 87176868Srink CMX_READ_1(sc, REG_OFFSET_DTR) 88176868Srink#define cmx_write_DTR(sc, val) \ 89176868Srink CMX_WRITE_1(sc, REG_OFFSET_DTR, val) 90176868Srink 91176868Srink#define cmx_test(byte, flags, test) \ 92176868Srink (((byte) & (flags)) == ((test) ? (flags) : 0)) 93176868Srink 94176868Srink#define cmx_test_BSR(sc, flags, test) \ 95176868Srink cmx_test(cmx_read_BSR(sc), flags, test) 96176868Srink 97176868Srink#define CMX_LOCK(sc) mtx_lock(&(sc)->mtx) 98176868Srink#define CMX_UNLOCK(sc) mtx_unlock(&(sc)->mtx) 99176868Srink#define CMX_LOCK_ASSERT(sc, what) mtx_assert(&(sc)->mtx, (what)) 100