summaryrefslogtreecommitdiffstats
path: root/sys/dev/twa/tw_osl_inline.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/twa/tw_osl_inline.h')
-rw-r--r--sys/dev/twa/tw_osl_inline.h365
1 files changed, 365 insertions, 0 deletions
diff --git a/sys/dev/twa/tw_osl_inline.h b/sys/dev/twa/tw_osl_inline.h
new file mode 100644
index 0000000..a4b4214
--- /dev/null
+++ b/sys/dev/twa/tw_osl_inline.h
@@ -0,0 +1,365 @@
+/*
+ * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
+ * Copyright (c) 2004-05 Vinod Kashyap.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+/*
+ * AMCC'S 3ware driver for 9000 series storage controllers.
+ *
+ * Author: Vinod Kashyap
+ */
+
+
+
+#ifndef TW_OSL_INLINE_H
+
+#define TW_OSL_INLINE_H
+
+
+/*
+ * Inline functions shared between OSL and CL, and defined by OSL.
+ */
+
+
+#include <dev/twa/tw_osl.h>
+
+
+
+/*
+ * Function name: tw_osl_init_lock
+ * Description: Initializes a lock.
+ *
+ * Input: ctlr_handle -- ptr to controller handle
+ * lock_name -- string indicating name of the lock
+ * Output: lock -- ptr to handle to the initialized lock
+ * Return value: None
+ */
+#define tw_osl_init_lock(ctlr_handle, lock_name, lock) \
+ mtx_init(lock, lock_name, NULL, MTX_SPIN)
+
+
+
+/*
+ * Function name: tw_osl_destroy_lock
+ * Description: Destroys a previously initialized lock.
+ *
+ * Input: ctlr_handle -- ptr to controller handle
+ * lock -- ptr to handle to the lock to be
+ * destroyed
+ * Output: None
+ * Return value: None
+ */
+#define tw_osl_destroy_lock(ctlr_handle, lock) \
+ mtx_destroy(lock)
+
+
+
+/*
+ * Function name: tw_osl_get_lock
+ * Description: Acquires the specified lock.
+ *
+ * Input: ctlr_handle -- ptr to controller handle
+ * lock -- ptr to handle to the lock to be
+ * acquired
+ * Output: None
+ * Return value: None
+ */
+#define tw_osl_get_lock(ctlr_handle, lock) \
+ mtx_lock_spin(lock)
+
+
+
+/*
+ * Function name: tw_osl_free_lock
+ * Description: Frees a previously acquired lock.
+ *
+ * Input: ctlr_handle -- ptr to controller handle
+ * lock -- ptr to handle to the lock to be freed
+ * Output: None
+ * Return value: None
+ */
+#define tw_osl_free_lock(ctlr_handle, lock) \
+ mtx_unlock_spin(lock)
+
+
+
+/*
+ * Function name: tw_osl_ctlr_ready
+ * Description: CL calls this function to notify the OS Layer that it
+ * is ready to accept new requests. This function is
+ * called only if a call to tw_osl_ctlr_busy has been
+ * made previously. We don't use this function as of now.
+ *
+ * Input: ctlr_handle -- ptr to controller handle
+ * Output: None
+ * Return value: None
+ */
+#define tw_osl_ctlr_ready(ctlr_handle)
+
+
+
+#ifdef TW_OSL_DEBUG
+
+/*
+ * Function name: tw_osl_dbg_printf
+ * Description: Prints passed info (prefixed by ctlr name)to syslog
+ *
+ * Input: ctlr_handle -- controller handle
+ * fmt -- format string for the arguments to follow
+ * ... -- variable number of arguments, to be printed
+ * based on the fmt string
+ * Output: None
+ * Return value: Number of bytes printed
+ */
+#define tw_osl_dbg_printf(ctlr_handle, fmt, args...) \
+ twa_printf((ctlr_handle->osl_ctlr_ctxt), fmt, ##args)
+
+#endif /* TW_OSL_DEBUG */
+
+
+
+/*
+ * Function name: tw_osl_notify_event
+ * Description: Prints passed event info (prefixed by ctlr name)
+ * to syslog
+ *
+ * Input: ctlr_handle -- controller handle
+ * event -- ptr to a packet describing the event/error
+ * Output: None
+ * Return value: None
+ */
+#define tw_osl_notify_event(ctlr_handle, event) \
+ twa_printf((ctlr_handle->osl_ctlr_ctxt), \
+ "%s: (0x%02X: 0x%04X): %s: %s\n", \
+ event->severity_str, \
+ event->event_src, \
+ event->aen_code, \
+ event->parameter_data + \
+ strlen(event->parameter_data) + 1, \
+ event->parameter_data)
+
+
+
+/*
+ * Function name: tw_osl_read_reg
+ * Description: Reads a register on the controller
+ *
+ * Input: ctlr_handle -- controller handle
+ * offset -- offset from Base Address
+ * size -- # of bytes to read
+ * Output: None
+ * Return value: Value read
+ */
+#define tw_osl_read_reg tw_osl_read_reg_inline
+static __inline TW_UINT32
+tw_osl_read_reg_inline(struct tw_cl_ctlr_handle *ctlr_handle,
+ TW_INT32 offset, TW_INT32 size)
+{
+ bus_space_tag_t bus_tag =
+ ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_tag;
+ bus_space_handle_t bus_handle =
+ ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_handle;
+
+ if (size == 4)
+ return((TW_UINT32)bus_space_read_4(bus_tag, bus_handle,
+ offset));
+ else if (size == 2)
+ return((TW_UINT32)bus_space_read_2(bus_tag, bus_handle,
+ offset));
+ else
+ return((TW_UINT32)bus_space_read_1(bus_tag, bus_handle,
+ offset));
+}
+
+
+
+/*
+ * Function name: tw_osl_write_reg
+ * Description: Writes to a register on the controller
+ *
+ * Input: ctlr_handle -- controller handle
+ * offset -- offset from Base Address
+ * value -- value to write
+ * size -- # of bytes to write
+ * Output: None
+ * Return value: None
+ */
+#define tw_osl_write_reg tw_osl_write_reg_inline
+static __inline TW_VOID
+tw_osl_write_reg_inline(struct tw_cl_ctlr_handle *ctlr_handle,
+ TW_INT32 offset, TW_INT32 value, TW_INT32 size)
+{
+ bus_space_tag_t bus_tag =
+ ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_tag;
+ bus_space_handle_t bus_handle =
+ ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_handle;
+
+ if (size == 4)
+ bus_space_write_4(bus_tag, bus_handle, offset, value);
+ else if (size == 2)
+ bus_space_write_2(bus_tag, bus_handle, offset, (TW_INT16)value);
+ else
+ bus_space_write_1(bus_tag, bus_handle, offset, (TW_INT8)value);
+}
+
+
+
+#ifdef TW_OSL_PCI_CONFIG_ACCESSIBLE
+
+/*
+ * Function name: tw_osl_read_pci_config
+ * Description: Reads from the PCI config space.
+ *
+ * Input: sc -- ptr to per ctlr structure
+ * offset -- register offset
+ * size -- # of bytes to be read
+ * Output: None
+ * Return value: Value read
+ */
+#define tw_osl_read_pci_config(ctlr_handle, offset, size) \
+ pci_read_config( \
+ ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_dev, \
+ offset, size)
+
+
+
+/*
+ * Function name: tw_osl_write_pci_config
+ * Description: Writes to the PCI config space.
+ *
+ * Input: sc -- ptr to per ctlr structure
+ * offset -- register offset
+ * value -- value to write
+ * size -- # of bytes to be written
+ * Output: None
+ * Return value: None
+ */
+#define tw_osl_write_pci_config(ctlr_handle, offset, value, size) \
+ pci_write_config( \
+ ((struct twa_softc *)(ctlr_handle->osl_ctlr_ctxt))->bus_dev, \
+ offset/*PCIR_STATUS*/, value, size)
+
+#endif /* TW_OSL_PCI_CONFIG_ACCESSIBLE */
+
+
+
+/*
+ * Function name: tw_osl_get_local_time
+ * Description: Gets the local time
+ *
+ * Input: None
+ * Output: None
+ * Return value: local time
+ */
+#define tw_osl_get_local_time() \
+ (time_second - (tz_minuteswest * 60) - \
+ (wall_cmos_clock ? adjkerntz : 0))
+
+
+
+/*
+ * Function name: tw_osl_delay
+ * Description: Spin for the specified time
+ *
+ * Input: usecs -- micro-seconds to spin
+ * Output: None
+ * Return value: None
+ */
+#define tw_osl_delay(usecs) DELAY(usecs)
+
+
+
+#ifdef TW_OSL_CAN_SLEEP
+
+/*
+ * Function name: tw_osl_sleep
+ * Description: Sleep for the specified time, or until woken up
+ *
+ * Input: ctlr_handle -- controller handle
+ * sleep_handle -- handle to sleep on
+ * timeout -- time period (in ms) to sleep
+ * Output: None
+ * Return value: 0 -- successfully woken up
+ * EWOULDBLOCK -- time out
+ * ERESTART -- woken up by a signal
+ */
+#define tw_osl_sleep(ctlr_handle, sleep_handle, timeout) \
+ tsleep((TW_VOID *)sleep_handle, PRIBIO, NULL, timeout)
+
+
+
+/*
+ * Function name: tw_osl_wakeup
+ * Description: Wake up a sleeping process
+ *
+ * Input: ctlr_handle -- controller handle
+ * sleep_handle -- handle of sleeping process to be
+ woken up
+ * Output: None
+ * Return value: None
+ */
+#define tw_osl_wakeup(ctlr_handle, sleep_handle) \
+ wakeup_one(sleep_handle)
+
+#endif /* TW_OSL_CAN_SLEEP */
+
+
+
+/* Allows setting breakpoints in the CL code for debugging purposes. */
+#define tw_osl_breakpoint() breakpoint()
+
+
+/* Text name of current function. */
+#define tw_osl_cur_func() __func__
+
+
+/* Copy 'size' bytes from 'src' to 'dest'. */
+#define tw_osl_memcpy(dest, src, size) bcopy(src, dest, size)
+
+
+/* Zero 'size' bytes starting at 'addr'. */
+#define tw_osl_memzero bzero
+
+
+/* Standard sprintf. */
+#define tw_osl_sprintf sprintf
+
+
+/* Copy string 'src' to 'dest'. */
+#define tw_osl_strcpy strcpy
+
+
+/* Return length of string pointed at by 'str'. */
+#define tw_osl_strlen strlen
+
+
+/* Standard vsprintf. */
+#define tw_osl_vsprintf vsprintf
+
+
+
+#endif /* TW_OSL_INLINE_H */
OpenPOWER on IntegriCloud