1227064Sbz/* 2227064Sbz * Copyright (c) 2010-2011 Qlogic Corporation 3227064Sbz * All rights reserved. 4227064Sbz * 5227064Sbz * Redistribution and use in source and binary forms, with or without 6227064Sbz * modification, are permitted provided that the following conditions 7227064Sbz * are met: 8227064Sbz * 9227064Sbz * 1. Redistributions of source code must retain the above copyright 10227064Sbz * notice, this list of conditions and the following disclaimer. 11227064Sbz * 2. Redistributions in binary form must reproduce the above copyright 12227064Sbz * notice, this list of conditions and the following disclaimer in the 13227064Sbz * documentation and/or other materials provided with the distribution. 14227064Sbz * 15227064Sbz * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16227064Sbz * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17227064Sbz * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18227064Sbz * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19227064Sbz * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20227064Sbz * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21227064Sbz * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22227064Sbz * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23227064Sbz * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24227064Sbz * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25227064Sbz * POSSIBILITY OF SUCH DAMAGE. 26227064Sbz * 27227064Sbz * $FreeBSD$ 28227064Sbz */ 29227064Sbz/* 30227064Sbz * File: qla_os.h 31227064Sbz * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656. 32227064Sbz */ 33227064Sbz 34227064Sbz#ifndef _QLA_OS_H_ 35227064Sbz#define _QLA_OS_H_ 36227064Sbz 37227064Sbz#include <sys/param.h> 38227064Sbz#include <sys/systm.h> 39227064Sbz#include <sys/mbuf.h> 40227064Sbz#include <sys/protosw.h> 41227064Sbz#include <sys/socket.h> 42227064Sbz#include <sys/malloc.h> 43227064Sbz#include <sys/module.h> 44227064Sbz#include <sys/kernel.h> 45227064Sbz#include <sys/sockio.h> 46227064Sbz#include <sys/types.h> 47227064Sbz#include <machine/atomic.h> 48227064Sbz#include <sys/conf.h> 49227064Sbz 50227064Sbz#if __FreeBSD_version < 700112 51227064Sbz#error FreeBSD Version not supported - use version >= 700112 52227064Sbz#endif 53227064Sbz 54227064Sbz#include <net/if.h> 55227064Sbz#include <net/if_arp.h> 56227064Sbz#include <net/ethernet.h> 57227064Sbz#include <net/if_dl.h> 58227064Sbz#include <net/if_media.h> 59227064Sbz#include <net/bpf.h> 60227064Sbz#include <net/if_types.h> 61227064Sbz#include <net/if_vlan_var.h> 62227064Sbz 63227064Sbz#include <netinet/in_systm.h> 64227064Sbz#include <netinet/in.h> 65227064Sbz#include <netinet/if_ether.h> 66227064Sbz#include <netinet/ip.h> 67227064Sbz#include <netinet/ip6.h> 68227064Sbz#include <netinet/tcp.h> 69227064Sbz#include <netinet/udp.h> 70227064Sbz#include <netinet/in_var.h> 71227064Sbz#include <netinet/tcp_lro.h> 72227064Sbz 73227064Sbz#include <sys/bus.h> 74227064Sbz#include <machine/bus.h> 75227064Sbz#include <sys/rman.h> 76227064Sbz#include <machine/resource.h> 77227064Sbz#include <dev/pci/pcireg.h> 78227064Sbz#include <dev/pci/pcivar.h> 79227064Sbz#include <sys/mutex.h> 80227064Sbz#include <sys/condvar.h> 81227064Sbz#include <sys/proc.h> 82227064Sbz#include <sys/sysctl.h> 83227064Sbz#include <sys/endian.h> 84227064Sbz#include <sys/taskqueue.h> 85227064Sbz#include <sys/pcpu.h> 86227064Sbz 87227064Sbz#include <sys/unistd.h> 88227064Sbz#include <sys/kthread.h> 89227064Sbz 90227064Sbz#define QLA_USEC_DELAY(usec) DELAY(usec) 91227064Sbz 92227064Sbzstatic __inline int qla_ms_to_hz(int ms) 93227064Sbz{ 94227064Sbz int qla_hz; 95227064Sbz 96227064Sbz struct timeval t; 97227064Sbz 98227064Sbz t.tv_sec = ms / 1000; 99227064Sbz t.tv_usec = (ms % 1000) * 1000; 100227064Sbz 101227064Sbz qla_hz = tvtohz(&t); 102227064Sbz 103227064Sbz if (qla_hz < 0) 104227064Sbz qla_hz = 0x7fffffff; 105227064Sbz if (!qla_hz) 106227064Sbz qla_hz = 1; 107227064Sbz 108227064Sbz return (qla_hz); 109227064Sbz} 110227064Sbz 111227064Sbzstatic __inline int qla_sec_to_hz(int sec) 112227064Sbz{ 113227064Sbz struct timeval t; 114227064Sbz 115227064Sbz t.tv_sec = sec; 116227064Sbz t.tv_usec = 0; 117227064Sbz 118227064Sbz return (tvtohz(&t)); 119227064Sbz} 120227064Sbz 121227064Sbz 122227064Sbz#define qla_host_to_le16(x) htole16(x) 123227064Sbz#define qla_host_to_le32(x) htole32(x) 124227064Sbz#define qla_host_to_le64(x) htole64(x) 125227064Sbz#define qla_host_to_be16(x) htobe16(x) 126227064Sbz#define qla_host_to_be32(x) htobe32(x) 127227064Sbz#define qla_host_to_be64(x) htobe64(x) 128227064Sbz 129227064Sbz#define qla_le16_to_host(x) le16toh(x) 130227064Sbz#define qla_le32_to_host(x) le32toh(x) 131227064Sbz#define qla_le64_to_host(x) le64toh(x) 132227064Sbz#define qla_be16_to_host(x) be16toh(x) 133227064Sbz#define qla_be32_to_host(x) be32toh(x) 134227064Sbz#define qla_be64_to_host(x) be64toh(x) 135227064Sbz 136227064SbzMALLOC_DECLARE(M_QLA8XXXBUF); 137227064Sbz 138227064Sbz#define qla_mdelay(fn, msecs) \ 139227064Sbz {\ 140227064Sbz if (cold) \ 141227064Sbz DELAY((msecs * 1000)); \ 142227064Sbz else \ 143227064Sbz pause(fn, qla_ms_to_hz(msecs)); \ 144227064Sbz } 145227064Sbz 146227064Sbz/* 147227064Sbz * Locks 148227064Sbz */ 149227064Sbz#define QLA_LOCK(ha, str) qla_lock(ha, str); 150227064Sbz#define QLA_UNLOCK(ha, str) qla_unlock(ha, str) 151227064Sbz 152227064Sbz#define QLA_TX_LOCK(ha) mtx_lock(&ha->tx_lock); 153227064Sbz#define QLA_TX_UNLOCK(ha) mtx_unlock(&ha->tx_lock); 154227064Sbz 155227064Sbz#define QLA_RX_LOCK(ha) mtx_lock(&ha->rx_lock); 156227064Sbz#define QLA_RX_UNLOCK(ha) mtx_unlock(&ha->rx_lock); 157227064Sbz 158227064Sbz#define QLA_RXJ_LOCK(ha) mtx_lock(&ha->rxj_lock); 159227064Sbz#define QLA_RXJ_UNLOCK(ha) mtx_unlock(&ha->rxj_lock); 160227064Sbz 161227064Sbz/* 162227064Sbz * structure encapsulating a DMA buffer 163227064Sbz */ 164227064Sbzstruct qla_dma { 165227064Sbz bus_size_t alignment; 166227064Sbz uint32_t size; 167227064Sbz void *dma_b; 168227064Sbz bus_addr_t dma_addr; 169227064Sbz bus_dmamap_t dma_map; 170227064Sbz bus_dma_tag_t dma_tag; 171227064Sbz}; 172227064Sbztypedef struct qla_dma qla_dma_t; 173227064Sbz 174227064Sbz#define QL_ASSERT(x, y) if (!x) panic y 175227064Sbz 176227064Sbz#endif /* #ifndef _QLA_OS_H_ */ 177