// SPDX-License-Identifier: GPL-2.0-or-later /* * Adaptec AAC series RAID controller driver * (c) Copyright 2001 Red Hat Inc. * * based on the old aacraid driver that is.. * Adaptec aacraid device driver for Linux. * * Copyright (c) 2000-2010 Adaptec, Inc. * 2010-2015 PMC-Sierra, Inc. ([email protected]) * 2016-2017 Microsemi Corp. ([email protected]) * * Module Name: * rx.c * * Abstract: Hardware miniport for Drawbridge specific hardware functions. */ #include <linux/kernel.h> #include <linux/init.h> #include <linux/types.h> #include <linux/pci.h> #include <linux/spinlock.h> #include <linux/blkdev.h> #include <linux/delay.h> #include <linux/completion.h> #include <linux/time.h> #include <linux/interrupt.h> #include <scsi/scsi_host.h> #include "aacraid.h" static irqreturn_t aac_rx_intr_producer(int irq, void *dev_id) { … } static irqreturn_t aac_rx_intr_message(int irq, void *dev_id) { … } /** * aac_rx_disable_interrupt - Disable interrupts * @dev: Adapter */ static void aac_rx_disable_interrupt(struct aac_dev *dev) { … } /** * aac_rx_enable_interrupt_producer - Enable interrupts * @dev: Adapter */ static void aac_rx_enable_interrupt_producer(struct aac_dev *dev) { … } /** * aac_rx_enable_interrupt_message - Enable interrupts * @dev: Adapter */ static void aac_rx_enable_interrupt_message(struct aac_dev *dev) { … } /** * rx_sync_cmd - send a command and wait * @dev: Adapter * @command: Command to execute * @p1: first parameter * @p2: second parameter * @p3: third parameter * @p4: forth parameter * @p5: fifth parameter * @p6: sixth parameter * @status: adapter status * @r1: first return value * @r2: second return value * @r3: third return value * @r4: forth return value * * This routine will send a synchronous command to the adapter and wait * for its completion. */ static int rx_sync_cmd(struct aac_dev *dev, u32 command, u32 p1, u32 p2, u32 p3, u32 p4, u32 p5, u32 p6, u32 *status, u32 * r1, u32 * r2, u32 * r3, u32 * r4) { … } /** * aac_rx_interrupt_adapter - interrupt adapter * @dev: Adapter * * Send an interrupt to the i960 and breakpoint it. */ static void aac_rx_interrupt_adapter(struct aac_dev *dev) { … } /** * aac_rx_notify_adapter - send an event to the adapter * @dev: Adapter * @event: Event to send * * Notify the i960 that something it probably cares about has * happened. */ static void aac_rx_notify_adapter(struct aac_dev *dev, u32 event) { … } /** * aac_rx_start_adapter - activate adapter * @dev: Adapter * * Start up processing on an i960 based AAC adapter */ static void aac_rx_start_adapter(struct aac_dev *dev) { … } /** * aac_rx_check_health * @dev: device to check if healthy * * Will attempt to determine if the specified adapter is alive and * capable of handling requests, returning 0 if alive. */ static int aac_rx_check_health(struct aac_dev *dev) { … } /** * aac_rx_deliver_producer * @fib: fib to issue * * Will send a fib, returning 0 if successful. */ int aac_rx_deliver_producer(struct fib * fib) { … } /** * aac_rx_deliver_message * @fib: fib to issue * * Will send a fib, returning 0 if successful. */ static int aac_rx_deliver_message(struct fib * fib) { … } /** * aac_rx_ioremap * @dev: adapter * @size: mapping resize request * */ static int aac_rx_ioremap(struct aac_dev * dev, u32 size) { … } static int aac_rx_restart_adapter(struct aac_dev *dev, int bled, u8 reset_type) { … } /** * aac_rx_select_comm - Select communications method * @dev: Adapter * @comm: communications method */ int aac_rx_select_comm(struct aac_dev *dev, int comm) { … } /** * _aac_rx_init - initialize an i960 based AAC card * @dev: device to configure * * Allocate and set up resources for the i960 based AAC variants. The * device_interface in the commregion will be allocated and linked * to the comm region. */ int _aac_rx_init(struct aac_dev *dev) { … } int aac_rx_init(struct aac_dev *dev) { … }