cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xillybus_core.c (50639B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * linux/drivers/misc/xillybus_core.c
      4 *
      5 * Copyright 2011 Xillybus Ltd, http://xillybus.com
      6 *
      7 * Driver for the Xillybus FPGA/host framework.
      8 *
      9 * This driver interfaces with a special IP core in an FPGA, setting up
     10 * a pipe between a hardware FIFO in the programmable logic and a device
     11 * file in the host. The number of such pipes and their attributes are
     12 * set up on the logic. This driver detects these automatically and
     13 * creates the device files accordingly.
     14 */
     15
     16#include <linux/list.h>
     17#include <linux/device.h>
     18#include <linux/module.h>
     19#include <linux/io.h>
     20#include <linux/dma-mapping.h>
     21#include <linux/interrupt.h>
     22#include <linux/sched.h>
     23#include <linux/fs.h>
     24#include <linux/spinlock.h>
     25#include <linux/mutex.h>
     26#include <linux/crc32.h>
     27#include <linux/poll.h>
     28#include <linux/delay.h>
     29#include <linux/slab.h>
     30#include <linux/workqueue.h>
     31#include "xillybus.h"
     32#include "xillybus_class.h"
     33
     34MODULE_DESCRIPTION("Xillybus core functions");
     35MODULE_AUTHOR("Eli Billauer, Xillybus Ltd.");
     36MODULE_ALIAS("xillybus_core");
     37MODULE_LICENSE("GPL v2");
     38
     39/* General timeout is 100 ms, rx timeout is 10 ms */
     40#define XILLY_RX_TIMEOUT (10*HZ/1000)
     41#define XILLY_TIMEOUT (100*HZ/1000)
     42
     43#define fpga_msg_ctrl_reg              0x0008
     44#define fpga_dma_control_reg           0x0020
     45#define fpga_dma_bufno_reg             0x0024
     46#define fpga_dma_bufaddr_lowaddr_reg   0x0028
     47#define fpga_dma_bufaddr_highaddr_reg  0x002c
     48#define fpga_buf_ctrl_reg              0x0030
     49#define fpga_buf_offset_reg            0x0034
     50#define fpga_endian_reg                0x0040
     51
     52#define XILLYMSG_OPCODE_RELEASEBUF 1
     53#define XILLYMSG_OPCODE_QUIESCEACK 2
     54#define XILLYMSG_OPCODE_FIFOEOF 3
     55#define XILLYMSG_OPCODE_FATAL_ERROR 4
     56#define XILLYMSG_OPCODE_NONEMPTY 5
     57
     58static const char xillyname[] = "xillybus";
     59
     60static struct workqueue_struct *xillybus_wq;
     61
     62/*
     63 * Locking scheme: Mutexes protect invocations of character device methods.
     64 * If both locks are taken, wr_mutex is taken first, rd_mutex second.
     65 *
     66 * wr_spinlock protects wr_*_buf_idx, wr_empty, wr_sleepy, wr_ready and the
     67 * buffers' end_offset fields against changes made by IRQ handler (and in
     68 * theory, other file request handlers, but the mutex handles that). Nothing
     69 * else.
     70 * They are held for short direct memory manipulations. Needless to say,
     71 * no mutex locking is allowed when a spinlock is held.
     72 *
     73 * rd_spinlock does the same with rd_*_buf_idx, rd_empty and end_offset.
     74 *
     75 * register_mutex is endpoint-specific, and is held when non-atomic
     76 * register operations are performed. wr_mutex and rd_mutex may be
     77 * held when register_mutex is taken, but none of the spinlocks. Note that
     78 * register_mutex doesn't protect against sporadic buf_ctrl_reg writes
     79 * which are unrelated to buf_offset_reg, since they are harmless.
     80 *
     81 * Blocking on the wait queues is allowed with mutexes held, but not with
     82 * spinlocks.
     83 *
     84 * Only interruptible blocking is allowed on mutexes and wait queues.
     85 *
     86 * All in all, the locking order goes (with skips allowed, of course):
     87 * wr_mutex -> rd_mutex -> register_mutex -> wr_spinlock -> rd_spinlock
     88 */
     89
     90static void malformed_message(struct xilly_endpoint *endpoint, u32 *buf)
     91{
     92	int opcode;
     93	int msg_channel, msg_bufno, msg_data, msg_dir;
     94
     95	opcode = (buf[0] >> 24) & 0xff;
     96	msg_dir = buf[0] & 1;
     97	msg_channel = (buf[0] >> 1) & 0x7ff;
     98	msg_bufno = (buf[0] >> 12) & 0x3ff;
     99	msg_data = buf[1] & 0xfffffff;
    100
    101	dev_warn(endpoint->dev,
    102		 "Malformed message (skipping): opcode=%d, channel=%03x, dir=%d, bufno=%03x, data=%07x\n",
    103		 opcode, msg_channel, msg_dir, msg_bufno, msg_data);
    104}
    105
    106/*
    107 * xillybus_isr assumes the interrupt is allocated exclusively to it,
    108 * which is the natural case MSI and several other hardware-oriented
    109 * interrupts. Sharing is not allowed.
    110 */
    111
    112irqreturn_t xillybus_isr(int irq, void *data)
    113{
    114	struct xilly_endpoint *ep = data;
    115	u32 *buf;
    116	unsigned int buf_size;
    117	int i;
    118	int opcode;
    119	unsigned int msg_channel, msg_bufno, msg_data, msg_dir;
    120	struct xilly_channel *channel;
    121
    122	buf = ep->msgbuf_addr;
    123	buf_size = ep->msg_buf_size/sizeof(u32);
    124
    125	dma_sync_single_for_cpu(ep->dev, ep->msgbuf_dma_addr,
    126				ep->msg_buf_size, DMA_FROM_DEVICE);
    127
    128	for (i = 0; i < buf_size; i += 2) {
    129		if (((buf[i+1] >> 28) & 0xf) != ep->msg_counter) {
    130			malformed_message(ep, &buf[i]);
    131			dev_warn(ep->dev,
    132				 "Sending a NACK on counter %x (instead of %x) on entry %d\n",
    133				 ((buf[i+1] >> 28) & 0xf),
    134				 ep->msg_counter,
    135				 i/2);
    136
    137			if (++ep->failed_messages > 10) {
    138				dev_err(ep->dev,
    139					"Lost sync with interrupt messages. Stopping.\n");
    140			} else {
    141				dma_sync_single_for_device(ep->dev,
    142							   ep->msgbuf_dma_addr,
    143							   ep->msg_buf_size,
    144							   DMA_FROM_DEVICE);
    145
    146				iowrite32(0x01,  /* Message NACK */
    147					  ep->registers + fpga_msg_ctrl_reg);
    148			}
    149			return IRQ_HANDLED;
    150		} else if (buf[i] & (1 << 22)) /* Last message */
    151			break;
    152	}
    153
    154	if (i >= buf_size) {
    155		dev_err(ep->dev, "Bad interrupt message. Stopping.\n");
    156		return IRQ_HANDLED;
    157	}
    158
    159	buf_size = i + 2;
    160
    161	for (i = 0; i < buf_size; i += 2) { /* Scan through messages */
    162		opcode = (buf[i] >> 24) & 0xff;
    163
    164		msg_dir = buf[i] & 1;
    165		msg_channel = (buf[i] >> 1) & 0x7ff;
    166		msg_bufno = (buf[i] >> 12) & 0x3ff;
    167		msg_data = buf[i+1] & 0xfffffff;
    168
    169		switch (opcode) {
    170		case XILLYMSG_OPCODE_RELEASEBUF:
    171			if ((msg_channel > ep->num_channels) ||
    172			    (msg_channel == 0)) {
    173				malformed_message(ep, &buf[i]);
    174				break;
    175			}
    176
    177			channel = ep->channels[msg_channel];
    178
    179			if (msg_dir) { /* Write channel */
    180				if (msg_bufno >= channel->num_wr_buffers) {
    181					malformed_message(ep, &buf[i]);
    182					break;
    183				}
    184				spin_lock(&channel->wr_spinlock);
    185				channel->wr_buffers[msg_bufno]->end_offset =
    186					msg_data;
    187				channel->wr_fpga_buf_idx = msg_bufno;
    188				channel->wr_empty = 0;
    189				channel->wr_sleepy = 0;
    190				spin_unlock(&channel->wr_spinlock);
    191
    192				wake_up_interruptible(&channel->wr_wait);
    193
    194			} else {
    195				/* Read channel */
    196
    197				if (msg_bufno >= channel->num_rd_buffers) {
    198					malformed_message(ep, &buf[i]);
    199					break;
    200				}
    201
    202				spin_lock(&channel->rd_spinlock);
    203				channel->rd_fpga_buf_idx = msg_bufno;
    204				channel->rd_full = 0;
    205				spin_unlock(&channel->rd_spinlock);
    206
    207				wake_up_interruptible(&channel->rd_wait);
    208				if (!channel->rd_synchronous)
    209					queue_delayed_work(
    210						xillybus_wq,
    211						&channel->rd_workitem,
    212						XILLY_RX_TIMEOUT);
    213			}
    214
    215			break;
    216		case XILLYMSG_OPCODE_NONEMPTY:
    217			if ((msg_channel > ep->num_channels) ||
    218			    (msg_channel == 0) || (!msg_dir) ||
    219			    !ep->channels[msg_channel]->wr_supports_nonempty) {
    220				malformed_message(ep, &buf[i]);
    221				break;
    222			}
    223
    224			channel = ep->channels[msg_channel];
    225
    226			if (msg_bufno >= channel->num_wr_buffers) {
    227				malformed_message(ep, &buf[i]);
    228				break;
    229			}
    230			spin_lock(&channel->wr_spinlock);
    231			if (msg_bufno == channel->wr_host_buf_idx)
    232				channel->wr_ready = 1;
    233			spin_unlock(&channel->wr_spinlock);
    234
    235			wake_up_interruptible(&channel->wr_ready_wait);
    236
    237			break;
    238		case XILLYMSG_OPCODE_QUIESCEACK:
    239			ep->idtlen = msg_data;
    240			wake_up_interruptible(&ep->ep_wait);
    241
    242			break;
    243		case XILLYMSG_OPCODE_FIFOEOF:
    244			if ((msg_channel > ep->num_channels) ||
    245			    (msg_channel == 0) || (!msg_dir) ||
    246			    !ep->channels[msg_channel]->num_wr_buffers) {
    247				malformed_message(ep, &buf[i]);
    248				break;
    249			}
    250			channel = ep->channels[msg_channel];
    251			spin_lock(&channel->wr_spinlock);
    252			channel->wr_eof = msg_bufno;
    253			channel->wr_sleepy = 0;
    254
    255			channel->wr_hangup = channel->wr_empty &&
    256				(channel->wr_host_buf_idx == msg_bufno);
    257
    258			spin_unlock(&channel->wr_spinlock);
    259
    260			wake_up_interruptible(&channel->wr_wait);
    261
    262			break;
    263		case XILLYMSG_OPCODE_FATAL_ERROR:
    264			ep->fatal_error = 1;
    265			wake_up_interruptible(&ep->ep_wait); /* For select() */
    266			dev_err(ep->dev,
    267				"FPGA reported a fatal error. This means that the low-level communication with the device has failed. This hardware problem is most likely unrelated to Xillybus (neither kernel module nor FPGA core), but reports are still welcome. All I/O is aborted.\n");
    268			break;
    269		default:
    270			malformed_message(ep, &buf[i]);
    271			break;
    272		}
    273	}
    274
    275	dma_sync_single_for_device(ep->dev, ep->msgbuf_dma_addr,
    276				   ep->msg_buf_size, DMA_FROM_DEVICE);
    277
    278	ep->msg_counter = (ep->msg_counter + 1) & 0xf;
    279	ep->failed_messages = 0;
    280	iowrite32(0x03, ep->registers + fpga_msg_ctrl_reg); /* Message ACK */
    281
    282	return IRQ_HANDLED;
    283}
    284EXPORT_SYMBOL(xillybus_isr);
    285
    286/*
    287 * A few trivial memory management functions.
    288 * NOTE: These functions are used only on probe and remove, and therefore
    289 * no locks are applied!
    290 */
    291
    292static void xillybus_autoflush(struct work_struct *work);
    293
    294struct xilly_alloc_state {
    295	void *salami;
    296	int left_of_salami;
    297	int nbuffer;
    298	enum dma_data_direction direction;
    299	u32 regdirection;
    300};
    301
    302static void xilly_unmap(void *ptr)
    303{
    304	struct xilly_mapping *data = ptr;
    305
    306	dma_unmap_single(data->device, data->dma_addr,
    307			 data->size, data->direction);
    308
    309	kfree(ptr);
    310}
    311
    312static int xilly_map_single(struct xilly_endpoint *ep,
    313			    void *ptr,
    314			    size_t size,
    315			    int direction,
    316			    dma_addr_t *ret_dma_handle
    317	)
    318{
    319	dma_addr_t addr;
    320	struct xilly_mapping *this;
    321
    322	this = kzalloc(sizeof(*this), GFP_KERNEL);
    323	if (!this)
    324		return -ENOMEM;
    325
    326	addr = dma_map_single(ep->dev, ptr, size, direction);
    327
    328	if (dma_mapping_error(ep->dev, addr)) {
    329		kfree(this);
    330		return -ENODEV;
    331	}
    332
    333	this->device = ep->dev;
    334	this->dma_addr = addr;
    335	this->size = size;
    336	this->direction = direction;
    337
    338	*ret_dma_handle = addr;
    339
    340	return devm_add_action_or_reset(ep->dev, xilly_unmap, this);
    341}
    342
    343static int xilly_get_dma_buffers(struct xilly_endpoint *ep,
    344				 struct xilly_alloc_state *s,
    345				 struct xilly_buffer **buffers,
    346				 int bufnum, int bytebufsize)
    347{
    348	int i, rc;
    349	dma_addr_t dma_addr;
    350	struct device *dev = ep->dev;
    351	struct xilly_buffer *this_buffer = NULL; /* Init to silence warning */
    352
    353	if (buffers) { /* Not the message buffer */
    354		this_buffer = devm_kcalloc(dev, bufnum,
    355					   sizeof(struct xilly_buffer),
    356					   GFP_KERNEL);
    357		if (!this_buffer)
    358			return -ENOMEM;
    359	}
    360
    361	for (i = 0; i < bufnum; i++) {
    362		/*
    363		 * Buffers are expected in descending size order, so there
    364		 * is either enough space for this buffer or none at all.
    365		 */
    366
    367		if ((s->left_of_salami < bytebufsize) &&
    368		    (s->left_of_salami > 0)) {
    369			dev_err(ep->dev,
    370				"Corrupt buffer allocation in IDT. Aborting.\n");
    371			return -ENODEV;
    372		}
    373
    374		if (s->left_of_salami == 0) {
    375			int allocorder, allocsize;
    376
    377			allocsize = PAGE_SIZE;
    378			allocorder = 0;
    379			while (bytebufsize > allocsize) {
    380				allocsize *= 2;
    381				allocorder++;
    382			}
    383
    384			s->salami = (void *) devm_get_free_pages(
    385				dev,
    386				GFP_KERNEL | __GFP_DMA32 | __GFP_ZERO,
    387				allocorder);
    388			if (!s->salami)
    389				return -ENOMEM;
    390
    391			s->left_of_salami = allocsize;
    392		}
    393
    394		rc = xilly_map_single(ep, s->salami,
    395				      bytebufsize, s->direction,
    396				      &dma_addr);
    397		if (rc)
    398			return rc;
    399
    400		iowrite32((u32) (dma_addr & 0xffffffff),
    401			  ep->registers + fpga_dma_bufaddr_lowaddr_reg);
    402		iowrite32(((u32) ((((u64) dma_addr) >> 32) & 0xffffffff)),
    403			  ep->registers + fpga_dma_bufaddr_highaddr_reg);
    404
    405		if (buffers) { /* Not the message buffer */
    406			this_buffer->addr = s->salami;
    407			this_buffer->dma_addr = dma_addr;
    408			buffers[i] = this_buffer++;
    409
    410			iowrite32(s->regdirection | s->nbuffer++,
    411				  ep->registers + fpga_dma_bufno_reg);
    412		} else {
    413			ep->msgbuf_addr = s->salami;
    414			ep->msgbuf_dma_addr = dma_addr;
    415			ep->msg_buf_size = bytebufsize;
    416
    417			iowrite32(s->regdirection,
    418				  ep->registers + fpga_dma_bufno_reg);
    419		}
    420
    421		s->left_of_salami -= bytebufsize;
    422		s->salami += bytebufsize;
    423	}
    424	return 0;
    425}
    426
    427static int xilly_setupchannels(struct xilly_endpoint *ep,
    428			       unsigned char *chandesc,
    429			       int entries)
    430{
    431	struct device *dev = ep->dev;
    432	int i, entry, rc;
    433	struct xilly_channel *channel;
    434	int channelnum, bufnum, bufsize, format, is_writebuf;
    435	int bytebufsize;
    436	int synchronous, allowpartial, exclusive_open, seekable;
    437	int supports_nonempty;
    438	int msg_buf_done = 0;
    439
    440	struct xilly_alloc_state rd_alloc = {
    441		.salami = NULL,
    442		.left_of_salami = 0,
    443		.nbuffer = 1,
    444		.direction = DMA_TO_DEVICE,
    445		.regdirection = 0,
    446	};
    447
    448	struct xilly_alloc_state wr_alloc = {
    449		.salami = NULL,
    450		.left_of_salami = 0,
    451		.nbuffer = 1,
    452		.direction = DMA_FROM_DEVICE,
    453		.regdirection = 0x80000000,
    454	};
    455
    456	channel = devm_kcalloc(dev, ep->num_channels,
    457			       sizeof(struct xilly_channel), GFP_KERNEL);
    458	if (!channel)
    459		return -ENOMEM;
    460
    461	ep->channels = devm_kcalloc(dev, ep->num_channels + 1,
    462				    sizeof(struct xilly_channel *),
    463				    GFP_KERNEL);
    464	if (!ep->channels)
    465		return -ENOMEM;
    466
    467	ep->channels[0] = NULL; /* Channel 0 is message buf. */
    468
    469	/* Initialize all channels with defaults */
    470
    471	for (i = 1; i <= ep->num_channels; i++) {
    472		channel->wr_buffers = NULL;
    473		channel->rd_buffers = NULL;
    474		channel->num_wr_buffers = 0;
    475		channel->num_rd_buffers = 0;
    476		channel->wr_fpga_buf_idx = -1;
    477		channel->wr_host_buf_idx = 0;
    478		channel->wr_host_buf_pos = 0;
    479		channel->wr_empty = 1;
    480		channel->wr_ready = 0;
    481		channel->wr_sleepy = 1;
    482		channel->rd_fpga_buf_idx = 0;
    483		channel->rd_host_buf_idx = 0;
    484		channel->rd_host_buf_pos = 0;
    485		channel->rd_full = 0;
    486		channel->wr_ref_count = 0;
    487		channel->rd_ref_count = 0;
    488
    489		spin_lock_init(&channel->wr_spinlock);
    490		spin_lock_init(&channel->rd_spinlock);
    491		mutex_init(&channel->wr_mutex);
    492		mutex_init(&channel->rd_mutex);
    493		init_waitqueue_head(&channel->rd_wait);
    494		init_waitqueue_head(&channel->wr_wait);
    495		init_waitqueue_head(&channel->wr_ready_wait);
    496
    497		INIT_DELAYED_WORK(&channel->rd_workitem, xillybus_autoflush);
    498
    499		channel->endpoint = ep;
    500		channel->chan_num = i;
    501
    502		channel->log2_element_size = 0;
    503
    504		ep->channels[i] = channel++;
    505	}
    506
    507	for (entry = 0; entry < entries; entry++, chandesc += 4) {
    508		struct xilly_buffer **buffers = NULL;
    509
    510		is_writebuf = chandesc[0] & 0x01;
    511		channelnum = (chandesc[0] >> 1) | ((chandesc[1] & 0x0f) << 7);
    512		format = (chandesc[1] >> 4) & 0x03;
    513		allowpartial = (chandesc[1] >> 6) & 0x01;
    514		synchronous = (chandesc[1] >> 7) & 0x01;
    515		bufsize = 1 << (chandesc[2] & 0x1f);
    516		bufnum = 1 << (chandesc[3] & 0x0f);
    517		exclusive_open = (chandesc[2] >> 7) & 0x01;
    518		seekable = (chandesc[2] >> 6) & 0x01;
    519		supports_nonempty = (chandesc[2] >> 5) & 0x01;
    520
    521		if ((channelnum > ep->num_channels) ||
    522		    ((channelnum == 0) && !is_writebuf)) {
    523			dev_err(ep->dev,
    524				"IDT requests channel out of range. Aborting.\n");
    525			return -ENODEV;
    526		}
    527
    528		channel = ep->channels[channelnum]; /* NULL for msg channel */
    529
    530		if (!is_writebuf || channelnum > 0) {
    531			channel->log2_element_size = ((format > 2) ?
    532						      2 : format);
    533
    534			bytebufsize = bufsize *
    535				(1 << channel->log2_element_size);
    536
    537			buffers = devm_kcalloc(dev, bufnum,
    538					       sizeof(struct xilly_buffer *),
    539					       GFP_KERNEL);
    540			if (!buffers)
    541				return -ENOMEM;
    542		} else {
    543			bytebufsize = bufsize << 2;
    544		}
    545
    546		if (!is_writebuf) {
    547			channel->num_rd_buffers = bufnum;
    548			channel->rd_buf_size = bytebufsize;
    549			channel->rd_allow_partial = allowpartial;
    550			channel->rd_synchronous = synchronous;
    551			channel->rd_exclusive_open = exclusive_open;
    552			channel->seekable = seekable;
    553
    554			channel->rd_buffers = buffers;
    555			rc = xilly_get_dma_buffers(ep, &rd_alloc, buffers,
    556						   bufnum, bytebufsize);
    557		} else if (channelnum > 0) {
    558			channel->num_wr_buffers = bufnum;
    559			channel->wr_buf_size = bytebufsize;
    560
    561			channel->seekable = seekable;
    562			channel->wr_supports_nonempty = supports_nonempty;
    563
    564			channel->wr_allow_partial = allowpartial;
    565			channel->wr_synchronous = synchronous;
    566			channel->wr_exclusive_open = exclusive_open;
    567
    568			channel->wr_buffers = buffers;
    569			rc = xilly_get_dma_buffers(ep, &wr_alloc, buffers,
    570						   bufnum, bytebufsize);
    571		} else {
    572			rc = xilly_get_dma_buffers(ep, &wr_alloc, NULL,
    573						   bufnum, bytebufsize);
    574			msg_buf_done++;
    575		}
    576
    577		if (rc)
    578			return -ENOMEM;
    579	}
    580
    581	if (!msg_buf_done) {
    582		dev_err(ep->dev,
    583			"Corrupt IDT: No message buffer. Aborting.\n");
    584		return -ENODEV;
    585	}
    586	return 0;
    587}
    588
    589static int xilly_scan_idt(struct xilly_endpoint *endpoint,
    590			  struct xilly_idt_handle *idt_handle)
    591{
    592	int count = 0;
    593	unsigned char *idt = endpoint->channels[1]->wr_buffers[0]->addr;
    594	unsigned char *end_of_idt = idt + endpoint->idtlen - 4;
    595	unsigned char *scan;
    596	int len;
    597
    598	scan = idt + 1;
    599	idt_handle->names = scan;
    600
    601	while ((scan <= end_of_idt) && *scan) {
    602		while ((scan <= end_of_idt) && *scan++)
    603			/* Do nothing, just scan thru string */;
    604		count++;
    605	}
    606
    607	idt_handle->names_len = scan - idt_handle->names;
    608
    609	scan++;
    610
    611	if (scan > end_of_idt) {
    612		dev_err(endpoint->dev,
    613			"IDT device name list overflow. Aborting.\n");
    614		return -ENODEV;
    615	}
    616	idt_handle->chandesc = scan;
    617
    618	len = endpoint->idtlen - (3 + ((int) (scan - idt)));
    619
    620	if (len & 0x03) {
    621		dev_err(endpoint->dev,
    622			"Corrupt IDT device name list. Aborting.\n");
    623		return -ENODEV;
    624	}
    625
    626	idt_handle->entries = len >> 2;
    627	endpoint->num_channels = count;
    628
    629	return 0;
    630}
    631
    632static int xilly_obtain_idt(struct xilly_endpoint *endpoint)
    633{
    634	struct xilly_channel *channel;
    635	unsigned char *version;
    636	long t;
    637
    638	channel = endpoint->channels[1]; /* This should be generated ad-hoc */
    639
    640	channel->wr_sleepy = 1;
    641
    642	iowrite32(1 |
    643		  (3 << 24), /* Opcode 3 for channel 0 = Send IDT */
    644		  endpoint->registers + fpga_buf_ctrl_reg);
    645
    646	t = wait_event_interruptible_timeout(channel->wr_wait,
    647					     (!channel->wr_sleepy),
    648					     XILLY_TIMEOUT);
    649
    650	if (t <= 0) {
    651		dev_err(endpoint->dev, "Failed to obtain IDT. Aborting.\n");
    652
    653		if (endpoint->fatal_error)
    654			return -EIO;
    655
    656		return -ENODEV;
    657	}
    658
    659	dma_sync_single_for_cpu(channel->endpoint->dev,
    660				channel->wr_buffers[0]->dma_addr,
    661				channel->wr_buf_size,
    662				DMA_FROM_DEVICE);
    663
    664	if (channel->wr_buffers[0]->end_offset != endpoint->idtlen) {
    665		dev_err(endpoint->dev,
    666			"IDT length mismatch (%d != %d). Aborting.\n",
    667			channel->wr_buffers[0]->end_offset, endpoint->idtlen);
    668		return -ENODEV;
    669	}
    670
    671	if (crc32_le(~0, channel->wr_buffers[0]->addr,
    672		     endpoint->idtlen+1) != 0) {
    673		dev_err(endpoint->dev, "IDT failed CRC check. Aborting.\n");
    674		return -ENODEV;
    675	}
    676
    677	version = channel->wr_buffers[0]->addr;
    678
    679	/* Check version number. Reject anything above 0x82. */
    680	if (*version > 0x82) {
    681		dev_err(endpoint->dev,
    682			"No support for IDT version 0x%02x. Maybe the xillybus driver needs an upgrade. Aborting.\n",
    683			*version);
    684		return -ENODEV;
    685	}
    686
    687	return 0;
    688}
    689
    690static ssize_t xillybus_read(struct file *filp, char __user *userbuf,
    691			     size_t count, loff_t *f_pos)
    692{
    693	ssize_t rc;
    694	unsigned long flags;
    695	int bytes_done = 0;
    696	int no_time_left = 0;
    697	long deadline, left_to_sleep;
    698	struct xilly_channel *channel = filp->private_data;
    699
    700	int empty, reached_eof, exhausted, ready;
    701	/* Initializations are there only to silence warnings */
    702
    703	int howmany = 0, bufpos = 0, bufidx = 0, bufferdone = 0;
    704	int waiting_bufidx;
    705
    706	if (channel->endpoint->fatal_error)
    707		return -EIO;
    708
    709	deadline = jiffies + 1 + XILLY_RX_TIMEOUT;
    710
    711	rc = mutex_lock_interruptible(&channel->wr_mutex);
    712	if (rc)
    713		return rc;
    714
    715	while (1) { /* Note that we may drop mutex within this loop */
    716		int bytes_to_do = count - bytes_done;
    717
    718		spin_lock_irqsave(&channel->wr_spinlock, flags);
    719
    720		empty = channel->wr_empty;
    721		ready = !empty || channel->wr_ready;
    722
    723		if (!empty) {
    724			bufidx = channel->wr_host_buf_idx;
    725			bufpos = channel->wr_host_buf_pos;
    726			howmany = ((channel->wr_buffers[bufidx]->end_offset
    727				    + 1) << channel->log2_element_size)
    728				- bufpos;
    729
    730			/* Update wr_host_* to its post-operation state */
    731			if (howmany > bytes_to_do) {
    732				bufferdone = 0;
    733
    734				howmany = bytes_to_do;
    735				channel->wr_host_buf_pos += howmany;
    736			} else {
    737				bufferdone = 1;
    738
    739				channel->wr_host_buf_pos = 0;
    740
    741				if (bufidx == channel->wr_fpga_buf_idx) {
    742					channel->wr_empty = 1;
    743					channel->wr_sleepy = 1;
    744					channel->wr_ready = 0;
    745				}
    746
    747				if (bufidx >= (channel->num_wr_buffers - 1))
    748					channel->wr_host_buf_idx = 0;
    749				else
    750					channel->wr_host_buf_idx++;
    751			}
    752		}
    753
    754		/*
    755		 * Marking our situation after the possible changes above,
    756		 * for use after releasing the spinlock.
    757		 *
    758		 * empty = empty before change
    759		 * exhasted = empty after possible change
    760		 */
    761
    762		reached_eof = channel->wr_empty &&
    763			(channel->wr_host_buf_idx == channel->wr_eof);
    764		channel->wr_hangup = reached_eof;
    765		exhausted = channel->wr_empty;
    766		waiting_bufidx = channel->wr_host_buf_idx;
    767
    768		spin_unlock_irqrestore(&channel->wr_spinlock, flags);
    769
    770		if (!empty) { /* Go on, now without the spinlock */
    771
    772			if (bufpos == 0) /* Position zero means it's virgin */
    773				dma_sync_single_for_cpu(channel->endpoint->dev,
    774							channel->wr_buffers[bufidx]->dma_addr,
    775							channel->wr_buf_size,
    776							DMA_FROM_DEVICE);
    777
    778			if (copy_to_user(
    779				    userbuf,
    780				    channel->wr_buffers[bufidx]->addr
    781				    + bufpos, howmany))
    782				rc = -EFAULT;
    783
    784			userbuf += howmany;
    785			bytes_done += howmany;
    786
    787			if (bufferdone) {
    788				dma_sync_single_for_device(channel->endpoint->dev,
    789							   channel->wr_buffers[bufidx]->dma_addr,
    790							   channel->wr_buf_size,
    791							   DMA_FROM_DEVICE);
    792
    793				/*
    794				 * Tell FPGA the buffer is done with. It's an
    795				 * atomic operation to the FPGA, so what
    796				 * happens with other channels doesn't matter,
    797				 * and the certain channel is protected with
    798				 * the channel-specific mutex.
    799				 */
    800
    801				iowrite32(1 | (channel->chan_num << 1) |
    802					  (bufidx << 12),
    803					  channel->endpoint->registers +
    804					  fpga_buf_ctrl_reg);
    805			}
    806
    807			if (rc) {
    808				mutex_unlock(&channel->wr_mutex);
    809				return rc;
    810			}
    811		}
    812
    813		/* This includes a zero-count return = EOF */
    814		if ((bytes_done >= count) || reached_eof)
    815			break;
    816
    817		if (!exhausted)
    818			continue; /* More in RAM buffer(s)? Just go on. */
    819
    820		if ((bytes_done > 0) &&
    821		    (no_time_left ||
    822		     (channel->wr_synchronous && channel->wr_allow_partial)))
    823			break;
    824
    825		/*
    826		 * Nonblocking read: The "ready" flag tells us that the FPGA
    827		 * has data to send. In non-blocking mode, if it isn't on,
    828		 * just return. But if there is, we jump directly to the point
    829		 * where we ask for the FPGA to send all it has, and wait
    830		 * until that data arrives. So in a sense, we *do* block in
    831		 * nonblocking mode, but only for a very short time.
    832		 */
    833
    834		if (!no_time_left && (filp->f_flags & O_NONBLOCK)) {
    835			if (bytes_done > 0)
    836				break;
    837
    838			if (ready)
    839				goto desperate;
    840
    841			rc = -EAGAIN;
    842			break;
    843		}
    844
    845		if (!no_time_left || (bytes_done > 0)) {
    846			/*
    847			 * Note that in case of an element-misaligned read
    848			 * request, offsetlimit will include the last element,
    849			 * which will be partially read from.
    850			 */
    851			int offsetlimit = ((count - bytes_done) - 1) >>
    852				channel->log2_element_size;
    853			int buf_elements = channel->wr_buf_size >>
    854				channel->log2_element_size;
    855
    856			/*
    857			 * In synchronous mode, always send an offset limit.
    858			 * Just don't send a value too big.
    859			 */
    860
    861			if (channel->wr_synchronous) {
    862				/* Don't request more than one buffer */
    863				if (channel->wr_allow_partial &&
    864				    (offsetlimit >= buf_elements))
    865					offsetlimit = buf_elements - 1;
    866
    867				/* Don't request more than all buffers */
    868				if (!channel->wr_allow_partial &&
    869				    (offsetlimit >=
    870				     (buf_elements * channel->num_wr_buffers)))
    871					offsetlimit = buf_elements *
    872						channel->num_wr_buffers - 1;
    873			}
    874
    875			/*
    876			 * In asynchronous mode, force early flush of a buffer
    877			 * only if that will allow returning a full count. The
    878			 * "offsetlimit < ( ... )" rather than "<=" excludes
    879			 * requesting a full buffer, which would obviously
    880			 * cause a buffer transmission anyhow
    881			 */
    882
    883			if (channel->wr_synchronous ||
    884			    (offsetlimit < (buf_elements - 1))) {
    885				mutex_lock(&channel->endpoint->register_mutex);
    886
    887				iowrite32(offsetlimit,
    888					  channel->endpoint->registers +
    889					  fpga_buf_offset_reg);
    890
    891				iowrite32(1 | (channel->chan_num << 1) |
    892					  (2 << 24) |  /* 2 = offset limit */
    893					  (waiting_bufidx << 12),
    894					  channel->endpoint->registers +
    895					  fpga_buf_ctrl_reg);
    896
    897				mutex_unlock(&channel->endpoint->
    898					     register_mutex);
    899			}
    900		}
    901
    902		/*
    903		 * If partial completion is disallowed, there is no point in
    904		 * timeout sleeping. Neither if no_time_left is set and
    905		 * there's no data.
    906		 */
    907
    908		if (!channel->wr_allow_partial ||
    909		    (no_time_left && (bytes_done == 0))) {
    910			/*
    911			 * This do-loop will run more than once if another
    912			 * thread reasserted wr_sleepy before we got the mutex
    913			 * back, so we try again.
    914			 */
    915
    916			do {
    917				mutex_unlock(&channel->wr_mutex);
    918
    919				if (wait_event_interruptible(
    920					    channel->wr_wait,
    921					    (!channel->wr_sleepy)))
    922					goto interrupted;
    923
    924				if (mutex_lock_interruptible(
    925					    &channel->wr_mutex))
    926					goto interrupted;
    927			} while (channel->wr_sleepy);
    928
    929			continue;
    930
    931interrupted: /* Mutex is not held if got here */
    932			if (channel->endpoint->fatal_error)
    933				return -EIO;
    934			if (bytes_done)
    935				return bytes_done;
    936			if (filp->f_flags & O_NONBLOCK)
    937				return -EAGAIN; /* Don't admit snoozing */
    938			return -EINTR;
    939		}
    940
    941		left_to_sleep = deadline - ((long) jiffies);
    942
    943		/*
    944		 * If our time is out, skip the waiting. We may miss wr_sleepy
    945		 * being deasserted but hey, almost missing the train is like
    946		 * missing it.
    947		 */
    948
    949		if (left_to_sleep > 0) {
    950			left_to_sleep =
    951				wait_event_interruptible_timeout(
    952					channel->wr_wait,
    953					(!channel->wr_sleepy),
    954					left_to_sleep);
    955
    956			if (left_to_sleep > 0) /* wr_sleepy deasserted */
    957				continue;
    958
    959			if (left_to_sleep < 0) { /* Interrupt */
    960				mutex_unlock(&channel->wr_mutex);
    961				if (channel->endpoint->fatal_error)
    962					return -EIO;
    963				if (bytes_done)
    964					return bytes_done;
    965				return -EINTR;
    966			}
    967		}
    968
    969desperate:
    970		no_time_left = 1; /* We're out of sleeping time. Desperate! */
    971
    972		if (bytes_done == 0) {
    973			/*
    974			 * Reaching here means that we allow partial return,
    975			 * that we've run out of time, and that we have
    976			 * nothing to return.
    977			 * So tell the FPGA to send anything it has or gets.
    978			 */
    979
    980			iowrite32(1 | (channel->chan_num << 1) |
    981				  (3 << 24) |  /* Opcode 3, flush it all! */
    982				  (waiting_bufidx << 12),
    983				  channel->endpoint->registers +
    984				  fpga_buf_ctrl_reg);
    985		}
    986
    987		/*
    988		 * Reaching here means that we *do* have data in the buffer,
    989		 * but the "partial" flag disallows returning less than
    990		 * required. And we don't have as much. So loop again,
    991		 * which is likely to end up blocking indefinitely until
    992		 * enough data has arrived.
    993		 */
    994	}
    995
    996	mutex_unlock(&channel->wr_mutex);
    997
    998	if (channel->endpoint->fatal_error)
    999		return -EIO;
   1000
   1001	if (rc)
   1002		return rc;
   1003
   1004	return bytes_done;
   1005}
   1006
   1007/*
   1008 * The timeout argument takes values as follows:
   1009 *  >0 : Flush with timeout
   1010 * ==0 : Flush, and wait idefinitely for the flush to complete
   1011 *  <0 : Autoflush: Flush only if there's a single buffer occupied
   1012 */
   1013
   1014static int xillybus_myflush(struct xilly_channel *channel, long timeout)
   1015{
   1016	int rc;
   1017	unsigned long flags;
   1018
   1019	int end_offset_plus1;
   1020	int bufidx, bufidx_minus1;
   1021	int i;
   1022	int empty;
   1023	int new_rd_host_buf_pos;
   1024
   1025	if (channel->endpoint->fatal_error)
   1026		return -EIO;
   1027	rc = mutex_lock_interruptible(&channel->rd_mutex);
   1028	if (rc)
   1029		return rc;
   1030
   1031	/*
   1032	 * Don't flush a closed channel. This can happen when the work queued
   1033	 * autoflush thread fires off after the file has closed. This is not
   1034	 * an error, just something to dismiss.
   1035	 */
   1036
   1037	if (!channel->rd_ref_count)
   1038		goto done;
   1039
   1040	bufidx = channel->rd_host_buf_idx;
   1041
   1042	bufidx_minus1 = (bufidx == 0) ?
   1043		channel->num_rd_buffers - 1 :
   1044		bufidx - 1;
   1045
   1046	end_offset_plus1 = channel->rd_host_buf_pos >>
   1047		channel->log2_element_size;
   1048
   1049	new_rd_host_buf_pos = channel->rd_host_buf_pos -
   1050		(end_offset_plus1 << channel->log2_element_size);
   1051
   1052	/* Submit the current buffer if it's nonempty */
   1053	if (end_offset_plus1) {
   1054		unsigned char *tail = channel->rd_buffers[bufidx]->addr +
   1055			(end_offset_plus1 << channel->log2_element_size);
   1056
   1057		/* Copy  unflushed data, so we can put it in next buffer */
   1058		for (i = 0; i < new_rd_host_buf_pos; i++)
   1059			channel->rd_leftovers[i] = *tail++;
   1060
   1061		spin_lock_irqsave(&channel->rd_spinlock, flags);
   1062
   1063		/* Autoflush only if a single buffer is occupied */
   1064
   1065		if ((timeout < 0) &&
   1066		    (channel->rd_full ||
   1067		     (bufidx_minus1 != channel->rd_fpga_buf_idx))) {
   1068			spin_unlock_irqrestore(&channel->rd_spinlock, flags);
   1069			/*
   1070			 * A new work item may be queued by the ISR exactly
   1071			 * now, since the execution of a work item allows the
   1072			 * queuing of a new one while it's running.
   1073			 */
   1074			goto done;
   1075		}
   1076
   1077		/* The 4th element is never needed for data, so it's a flag */
   1078		channel->rd_leftovers[3] = (new_rd_host_buf_pos != 0);
   1079
   1080		/* Set up rd_full to reflect a certain moment's state */
   1081
   1082		if (bufidx == channel->rd_fpga_buf_idx)
   1083			channel->rd_full = 1;
   1084		spin_unlock_irqrestore(&channel->rd_spinlock, flags);
   1085
   1086		if (bufidx >= (channel->num_rd_buffers - 1))
   1087			channel->rd_host_buf_idx = 0;
   1088		else
   1089			channel->rd_host_buf_idx++;
   1090
   1091		dma_sync_single_for_device(channel->endpoint->dev,
   1092					   channel->rd_buffers[bufidx]->dma_addr,
   1093					   channel->rd_buf_size,
   1094					   DMA_TO_DEVICE);
   1095
   1096		mutex_lock(&channel->endpoint->register_mutex);
   1097
   1098		iowrite32(end_offset_plus1 - 1,
   1099			  channel->endpoint->registers + fpga_buf_offset_reg);
   1100
   1101		iowrite32((channel->chan_num << 1) | /* Channel ID */
   1102			  (2 << 24) |  /* Opcode 2, submit buffer */
   1103			  (bufidx << 12),
   1104			  channel->endpoint->registers + fpga_buf_ctrl_reg);
   1105
   1106		mutex_unlock(&channel->endpoint->register_mutex);
   1107	} else if (bufidx == 0) {
   1108		bufidx = channel->num_rd_buffers - 1;
   1109	} else {
   1110		bufidx--;
   1111	}
   1112
   1113	channel->rd_host_buf_pos = new_rd_host_buf_pos;
   1114
   1115	if (timeout < 0)
   1116		goto done; /* Autoflush */
   1117
   1118	/*
   1119	 * bufidx is now the last buffer written to (or equal to
   1120	 * rd_fpga_buf_idx if buffer was never written to), and
   1121	 * channel->rd_host_buf_idx the one after it.
   1122	 *
   1123	 * If bufidx == channel->rd_fpga_buf_idx we're either empty or full.
   1124	 */
   1125
   1126	while (1) { /* Loop waiting for draining of buffers */
   1127		spin_lock_irqsave(&channel->rd_spinlock, flags);
   1128
   1129		if (bufidx != channel->rd_fpga_buf_idx)
   1130			channel->rd_full = 1; /*
   1131					       * Not really full,
   1132					       * but needs waiting.
   1133					       */
   1134
   1135		empty = !channel->rd_full;
   1136
   1137		spin_unlock_irqrestore(&channel->rd_spinlock, flags);
   1138
   1139		if (empty)
   1140			break;
   1141
   1142		/*
   1143		 * Indefinite sleep with mutex taken. With data waiting for
   1144		 * flushing user should not be surprised if open() for write
   1145		 * sleeps.
   1146		 */
   1147		if (timeout == 0)
   1148			wait_event_interruptible(channel->rd_wait,
   1149						 (!channel->rd_full));
   1150
   1151		else if (wait_event_interruptible_timeout(
   1152				 channel->rd_wait,
   1153				 (!channel->rd_full),
   1154				 timeout) == 0) {
   1155			dev_warn(channel->endpoint->dev,
   1156				 "Timed out while flushing. Output data may be lost.\n");
   1157
   1158			rc = -ETIMEDOUT;
   1159			break;
   1160		}
   1161
   1162		if (channel->rd_full) {
   1163			rc = -EINTR;
   1164			break;
   1165		}
   1166	}
   1167
   1168done:
   1169	mutex_unlock(&channel->rd_mutex);
   1170
   1171	if (channel->endpoint->fatal_error)
   1172		return -EIO;
   1173
   1174	return rc;
   1175}
   1176
   1177static int xillybus_flush(struct file *filp, fl_owner_t id)
   1178{
   1179	if (!(filp->f_mode & FMODE_WRITE))
   1180		return 0;
   1181
   1182	return xillybus_myflush(filp->private_data, HZ); /* 1 second timeout */
   1183}
   1184
   1185static void xillybus_autoflush(struct work_struct *work)
   1186{
   1187	struct delayed_work *workitem = container_of(
   1188		work, struct delayed_work, work);
   1189	struct xilly_channel *channel = container_of(
   1190		workitem, struct xilly_channel, rd_workitem);
   1191	int rc;
   1192
   1193	rc = xillybus_myflush(channel, -1);
   1194	if (rc == -EINTR)
   1195		dev_warn(channel->endpoint->dev,
   1196			 "Autoflush failed because work queue thread got a signal.\n");
   1197	else if (rc)
   1198		dev_err(channel->endpoint->dev,
   1199			"Autoflush failed under weird circumstances.\n");
   1200}
   1201
   1202static ssize_t xillybus_write(struct file *filp, const char __user *userbuf,
   1203			      size_t count, loff_t *f_pos)
   1204{
   1205	ssize_t rc;
   1206	unsigned long flags;
   1207	int bytes_done = 0;
   1208	struct xilly_channel *channel = filp->private_data;
   1209
   1210	int full, exhausted;
   1211	/* Initializations are there only to silence warnings */
   1212
   1213	int howmany = 0, bufpos = 0, bufidx = 0, bufferdone = 0;
   1214	int end_offset_plus1 = 0;
   1215
   1216	if (channel->endpoint->fatal_error)
   1217		return -EIO;
   1218
   1219	rc = mutex_lock_interruptible(&channel->rd_mutex);
   1220	if (rc)
   1221		return rc;
   1222
   1223	while (1) {
   1224		int bytes_to_do = count - bytes_done;
   1225
   1226		spin_lock_irqsave(&channel->rd_spinlock, flags);
   1227
   1228		full = channel->rd_full;
   1229
   1230		if (!full) {
   1231			bufidx = channel->rd_host_buf_idx;
   1232			bufpos = channel->rd_host_buf_pos;
   1233			howmany = channel->rd_buf_size - bufpos;
   1234
   1235			/*
   1236			 * Update rd_host_* to its state after this operation.
   1237			 * count=0 means committing the buffer immediately,
   1238			 * which is like flushing, but not necessarily block.
   1239			 */
   1240
   1241			if ((howmany > bytes_to_do) &&
   1242			    (count ||
   1243			     ((bufpos >> channel->log2_element_size) == 0))) {
   1244				bufferdone = 0;
   1245
   1246				howmany = bytes_to_do;
   1247				channel->rd_host_buf_pos += howmany;
   1248			} else {
   1249				bufferdone = 1;
   1250
   1251				if (count) {
   1252					end_offset_plus1 =
   1253						channel->rd_buf_size >>
   1254						channel->log2_element_size;
   1255					channel->rd_host_buf_pos = 0;
   1256				} else {
   1257					unsigned char *tail;
   1258					int i;
   1259
   1260					howmany = 0;
   1261
   1262					end_offset_plus1 = bufpos >>
   1263						channel->log2_element_size;
   1264
   1265					channel->rd_host_buf_pos -=
   1266						end_offset_plus1 <<
   1267						channel->log2_element_size;
   1268
   1269					tail = channel->
   1270						rd_buffers[bufidx]->addr +
   1271						(end_offset_plus1 <<
   1272						 channel->log2_element_size);
   1273
   1274					for (i = 0;
   1275					     i < channel->rd_host_buf_pos;
   1276					     i++)
   1277						channel->rd_leftovers[i] =
   1278							*tail++;
   1279				}
   1280
   1281				if (bufidx == channel->rd_fpga_buf_idx)
   1282					channel->rd_full = 1;
   1283
   1284				if (bufidx >= (channel->num_rd_buffers - 1))
   1285					channel->rd_host_buf_idx = 0;
   1286				else
   1287					channel->rd_host_buf_idx++;
   1288			}
   1289		}
   1290
   1291		/*
   1292		 * Marking our situation after the possible changes above,
   1293		 * for use  after releasing the spinlock.
   1294		 *
   1295		 * full = full before change
   1296		 * exhasted = full after possible change
   1297		 */
   1298
   1299		exhausted = channel->rd_full;
   1300
   1301		spin_unlock_irqrestore(&channel->rd_spinlock, flags);
   1302
   1303		if (!full) { /* Go on, now without the spinlock */
   1304			unsigned char *head =
   1305				channel->rd_buffers[bufidx]->addr;
   1306			int i;
   1307
   1308			if ((bufpos == 0) || /* Zero means it's virgin */
   1309			    (channel->rd_leftovers[3] != 0)) {
   1310				dma_sync_single_for_cpu(channel->endpoint->dev,
   1311							channel->rd_buffers[bufidx]->dma_addr,
   1312							channel->rd_buf_size,
   1313							DMA_TO_DEVICE);
   1314
   1315				/* Virgin, but leftovers are due */
   1316				for (i = 0; i < bufpos; i++)
   1317					*head++ = channel->rd_leftovers[i];
   1318
   1319				channel->rd_leftovers[3] = 0; /* Clear flag */
   1320			}
   1321
   1322			if (copy_from_user(
   1323				    channel->rd_buffers[bufidx]->addr + bufpos,
   1324				    userbuf, howmany))
   1325				rc = -EFAULT;
   1326
   1327			userbuf += howmany;
   1328			bytes_done += howmany;
   1329
   1330			if (bufferdone) {
   1331				dma_sync_single_for_device(channel->endpoint->dev,
   1332							   channel->rd_buffers[bufidx]->dma_addr,
   1333							   channel->rd_buf_size,
   1334							   DMA_TO_DEVICE);
   1335
   1336				mutex_lock(&channel->endpoint->register_mutex);
   1337
   1338				iowrite32(end_offset_plus1 - 1,
   1339					  channel->endpoint->registers +
   1340					  fpga_buf_offset_reg);
   1341
   1342				iowrite32((channel->chan_num << 1) |
   1343					  (2 << 24) |  /* 2 = submit buffer */
   1344					  (bufidx << 12),
   1345					  channel->endpoint->registers +
   1346					  fpga_buf_ctrl_reg);
   1347
   1348				mutex_unlock(&channel->endpoint->
   1349					     register_mutex);
   1350
   1351				channel->rd_leftovers[3] =
   1352					(channel->rd_host_buf_pos != 0);
   1353			}
   1354
   1355			if (rc) {
   1356				mutex_unlock(&channel->rd_mutex);
   1357
   1358				if (channel->endpoint->fatal_error)
   1359					return -EIO;
   1360
   1361				if (!channel->rd_synchronous)
   1362					queue_delayed_work(
   1363						xillybus_wq,
   1364						&channel->rd_workitem,
   1365						XILLY_RX_TIMEOUT);
   1366
   1367				return rc;
   1368			}
   1369		}
   1370
   1371		if (bytes_done >= count)
   1372			break;
   1373
   1374		if (!exhausted)
   1375			continue; /* If there's more space, just go on */
   1376
   1377		if ((bytes_done > 0) && channel->rd_allow_partial)
   1378			break;
   1379
   1380		/*
   1381		 * Indefinite sleep with mutex taken. With data waiting for
   1382		 * flushing, user should not be surprised if open() for write
   1383		 * sleeps.
   1384		 */
   1385
   1386		if (filp->f_flags & O_NONBLOCK) {
   1387			rc = -EAGAIN;
   1388			break;
   1389		}
   1390
   1391		if (wait_event_interruptible(channel->rd_wait,
   1392					     (!channel->rd_full))) {
   1393			mutex_unlock(&channel->rd_mutex);
   1394
   1395			if (channel->endpoint->fatal_error)
   1396				return -EIO;
   1397
   1398			if (bytes_done)
   1399				return bytes_done;
   1400			return -EINTR;
   1401		}
   1402	}
   1403
   1404	mutex_unlock(&channel->rd_mutex);
   1405
   1406	if (!channel->rd_synchronous)
   1407		queue_delayed_work(xillybus_wq,
   1408				   &channel->rd_workitem,
   1409				   XILLY_RX_TIMEOUT);
   1410
   1411	if (channel->endpoint->fatal_error)
   1412		return -EIO;
   1413
   1414	if (rc)
   1415		return rc;
   1416
   1417	if ((channel->rd_synchronous) && (bytes_done > 0)) {
   1418		rc = xillybus_myflush(filp->private_data, 0); /* No timeout */
   1419
   1420		if (rc && (rc != -EINTR))
   1421			return rc;
   1422	}
   1423
   1424	return bytes_done;
   1425}
   1426
   1427static int xillybus_open(struct inode *inode, struct file *filp)
   1428{
   1429	int rc;
   1430	unsigned long flags;
   1431	struct xilly_endpoint *endpoint;
   1432	struct xilly_channel *channel;
   1433	int index;
   1434
   1435	rc = xillybus_find_inode(inode, (void **)&endpoint, &index);
   1436	if (rc)
   1437		return rc;
   1438
   1439	if (endpoint->fatal_error)
   1440		return -EIO;
   1441
   1442	channel = endpoint->channels[1 + index];
   1443	filp->private_data = channel;
   1444
   1445	/*
   1446	 * It gets complicated because:
   1447	 * 1. We don't want to take a mutex we don't have to
   1448	 * 2. We don't want to open one direction if the other will fail.
   1449	 */
   1450
   1451	if ((filp->f_mode & FMODE_READ) && (!channel->num_wr_buffers))
   1452		return -ENODEV;
   1453
   1454	if ((filp->f_mode & FMODE_WRITE) && (!channel->num_rd_buffers))
   1455		return -ENODEV;
   1456
   1457	if ((filp->f_mode & FMODE_READ) && (filp->f_flags & O_NONBLOCK) &&
   1458	    (channel->wr_synchronous || !channel->wr_allow_partial ||
   1459	     !channel->wr_supports_nonempty)) {
   1460		dev_err(endpoint->dev,
   1461			"open() failed: O_NONBLOCK not allowed for read on this device\n");
   1462		return -ENODEV;
   1463	}
   1464
   1465	if ((filp->f_mode & FMODE_WRITE) && (filp->f_flags & O_NONBLOCK) &&
   1466	    (channel->rd_synchronous || !channel->rd_allow_partial)) {
   1467		dev_err(endpoint->dev,
   1468			"open() failed: O_NONBLOCK not allowed for write on this device\n");
   1469		return -ENODEV;
   1470	}
   1471
   1472	/*
   1473	 * Note: open() may block on getting mutexes despite O_NONBLOCK.
   1474	 * This shouldn't occur normally, since multiple open of the same
   1475	 * file descriptor is almost always prohibited anyhow
   1476	 * (*_exclusive_open is normally set in real-life systems).
   1477	 */
   1478
   1479	if (filp->f_mode & FMODE_READ) {
   1480		rc = mutex_lock_interruptible(&channel->wr_mutex);
   1481		if (rc)
   1482			return rc;
   1483	}
   1484
   1485	if (filp->f_mode & FMODE_WRITE) {
   1486		rc = mutex_lock_interruptible(&channel->rd_mutex);
   1487		if (rc)
   1488			goto unlock_wr;
   1489	}
   1490
   1491	if ((filp->f_mode & FMODE_READ) &&
   1492	    (channel->wr_ref_count != 0) &&
   1493	    (channel->wr_exclusive_open)) {
   1494		rc = -EBUSY;
   1495		goto unlock;
   1496	}
   1497
   1498	if ((filp->f_mode & FMODE_WRITE) &&
   1499	    (channel->rd_ref_count != 0) &&
   1500	    (channel->rd_exclusive_open)) {
   1501		rc = -EBUSY;
   1502		goto unlock;
   1503	}
   1504
   1505	if (filp->f_mode & FMODE_READ) {
   1506		if (channel->wr_ref_count == 0) { /* First open of file */
   1507			/* Move the host to first buffer */
   1508			spin_lock_irqsave(&channel->wr_spinlock, flags);
   1509			channel->wr_host_buf_idx = 0;
   1510			channel->wr_host_buf_pos = 0;
   1511			channel->wr_fpga_buf_idx = -1;
   1512			channel->wr_empty = 1;
   1513			channel->wr_ready = 0;
   1514			channel->wr_sleepy = 1;
   1515			channel->wr_eof = -1;
   1516			channel->wr_hangup = 0;
   1517
   1518			spin_unlock_irqrestore(&channel->wr_spinlock, flags);
   1519
   1520			iowrite32(1 | (channel->chan_num << 1) |
   1521				  (4 << 24) |  /* Opcode 4, open channel */
   1522				  ((channel->wr_synchronous & 1) << 23),
   1523				  channel->endpoint->registers +
   1524				  fpga_buf_ctrl_reg);
   1525		}
   1526
   1527		channel->wr_ref_count++;
   1528	}
   1529
   1530	if (filp->f_mode & FMODE_WRITE) {
   1531		if (channel->rd_ref_count == 0) { /* First open of file */
   1532			/* Move the host to first buffer */
   1533			spin_lock_irqsave(&channel->rd_spinlock, flags);
   1534			channel->rd_host_buf_idx = 0;
   1535			channel->rd_host_buf_pos = 0;
   1536			channel->rd_leftovers[3] = 0; /* No leftovers. */
   1537			channel->rd_fpga_buf_idx = channel->num_rd_buffers - 1;
   1538			channel->rd_full = 0;
   1539
   1540			spin_unlock_irqrestore(&channel->rd_spinlock, flags);
   1541
   1542			iowrite32((channel->chan_num << 1) |
   1543				  (4 << 24),   /* Opcode 4, open channel */
   1544				  channel->endpoint->registers +
   1545				  fpga_buf_ctrl_reg);
   1546		}
   1547
   1548		channel->rd_ref_count++;
   1549	}
   1550
   1551unlock:
   1552	if (filp->f_mode & FMODE_WRITE)
   1553		mutex_unlock(&channel->rd_mutex);
   1554unlock_wr:
   1555	if (filp->f_mode & FMODE_READ)
   1556		mutex_unlock(&channel->wr_mutex);
   1557
   1558	if (!rc && (!channel->seekable))
   1559		return nonseekable_open(inode, filp);
   1560
   1561	return rc;
   1562}
   1563
   1564static int xillybus_release(struct inode *inode, struct file *filp)
   1565{
   1566	unsigned long flags;
   1567	struct xilly_channel *channel = filp->private_data;
   1568
   1569	int buf_idx;
   1570	int eof;
   1571
   1572	if (channel->endpoint->fatal_error)
   1573		return -EIO;
   1574
   1575	if (filp->f_mode & FMODE_WRITE) {
   1576		mutex_lock(&channel->rd_mutex);
   1577
   1578		channel->rd_ref_count--;
   1579
   1580		if (channel->rd_ref_count == 0) {
   1581			/*
   1582			 * We rely on the kernel calling flush()
   1583			 * before we get here.
   1584			 */
   1585
   1586			iowrite32((channel->chan_num << 1) | /* Channel ID */
   1587				  (5 << 24),  /* Opcode 5, close channel */
   1588				  channel->endpoint->registers +
   1589				  fpga_buf_ctrl_reg);
   1590		}
   1591		mutex_unlock(&channel->rd_mutex);
   1592	}
   1593
   1594	if (filp->f_mode & FMODE_READ) {
   1595		mutex_lock(&channel->wr_mutex);
   1596
   1597		channel->wr_ref_count--;
   1598
   1599		if (channel->wr_ref_count == 0) {
   1600			iowrite32(1 | (channel->chan_num << 1) |
   1601				  (5 << 24),  /* Opcode 5, close channel */
   1602				  channel->endpoint->registers +
   1603				  fpga_buf_ctrl_reg);
   1604
   1605			/*
   1606			 * This is crazily cautious: We make sure that not
   1607			 * only that we got an EOF (be it because we closed
   1608			 * the channel or because of a user's EOF), but verify
   1609			 * that it's one beyond the last buffer arrived, so
   1610			 * we have no leftover buffers pending before wrapping
   1611			 * up (which can only happen in asynchronous channels,
   1612			 * BTW)
   1613			 */
   1614
   1615			while (1) {
   1616				spin_lock_irqsave(&channel->wr_spinlock,
   1617						  flags);
   1618				buf_idx = channel->wr_fpga_buf_idx;
   1619				eof = channel->wr_eof;
   1620				channel->wr_sleepy = 1;
   1621				spin_unlock_irqrestore(&channel->wr_spinlock,
   1622						       flags);
   1623
   1624				/*
   1625				 * Check if eof points at the buffer after
   1626				 * the last one the FPGA submitted. Note that
   1627				 * no EOF is marked by negative eof.
   1628				 */
   1629
   1630				buf_idx++;
   1631				if (buf_idx == channel->num_wr_buffers)
   1632					buf_idx = 0;
   1633
   1634				if (buf_idx == eof)
   1635					break;
   1636
   1637				/*
   1638				 * Steal extra 100 ms if awaken by interrupt.
   1639				 * This is a simple workaround for an
   1640				 * interrupt pending when entering, which would
   1641				 * otherwise result in declaring the hardware
   1642				 * non-responsive.
   1643				 */
   1644
   1645				if (wait_event_interruptible(
   1646					    channel->wr_wait,
   1647					    (!channel->wr_sleepy)))
   1648					msleep(100);
   1649
   1650				if (channel->wr_sleepy) {
   1651					mutex_unlock(&channel->wr_mutex);
   1652					dev_warn(channel->endpoint->dev,
   1653						 "Hardware failed to respond to close command, therefore left in messy state.\n");
   1654					return -EINTR;
   1655				}
   1656			}
   1657		}
   1658
   1659		mutex_unlock(&channel->wr_mutex);
   1660	}
   1661
   1662	return 0;
   1663}
   1664
   1665static loff_t xillybus_llseek(struct file *filp, loff_t offset, int whence)
   1666{
   1667	struct xilly_channel *channel = filp->private_data;
   1668	loff_t pos = filp->f_pos;
   1669	int rc = 0;
   1670
   1671	/*
   1672	 * Take both mutexes not allowing interrupts, since it seems like
   1673	 * common applications don't expect an -EINTR here. Besides, multiple
   1674	 * access to a single file descriptor on seekable devices is a mess
   1675	 * anyhow.
   1676	 */
   1677
   1678	if (channel->endpoint->fatal_error)
   1679		return -EIO;
   1680
   1681	mutex_lock(&channel->wr_mutex);
   1682	mutex_lock(&channel->rd_mutex);
   1683
   1684	switch (whence) {
   1685	case SEEK_SET:
   1686		pos = offset;
   1687		break;
   1688	case SEEK_CUR:
   1689		pos += offset;
   1690		break;
   1691	case SEEK_END:
   1692		pos = offset; /* Going to the end => to the beginning */
   1693		break;
   1694	default:
   1695		rc = -EINVAL;
   1696		goto end;
   1697	}
   1698
   1699	/* In any case, we must finish on an element boundary */
   1700	if (pos & ((1 << channel->log2_element_size) - 1)) {
   1701		rc = -EINVAL;
   1702		goto end;
   1703	}
   1704
   1705	mutex_lock(&channel->endpoint->register_mutex);
   1706
   1707	iowrite32(pos >> channel->log2_element_size,
   1708		  channel->endpoint->registers + fpga_buf_offset_reg);
   1709
   1710	iowrite32((channel->chan_num << 1) |
   1711		  (6 << 24),  /* Opcode 6, set address */
   1712		  channel->endpoint->registers + fpga_buf_ctrl_reg);
   1713
   1714	mutex_unlock(&channel->endpoint->register_mutex);
   1715
   1716end:
   1717	mutex_unlock(&channel->rd_mutex);
   1718	mutex_unlock(&channel->wr_mutex);
   1719
   1720	if (rc) /* Return error after releasing mutexes */
   1721		return rc;
   1722
   1723	filp->f_pos = pos;
   1724
   1725	/*
   1726	 * Since seekable devices are allowed only when the channel is
   1727	 * synchronous, we assume that there is no data pending in either
   1728	 * direction (which holds true as long as no concurrent access on the
   1729	 * file descriptor takes place).
   1730	 * The only thing we may need to throw away is leftovers from partial
   1731	 * write() flush.
   1732	 */
   1733
   1734	channel->rd_leftovers[3] = 0;
   1735
   1736	return pos;
   1737}
   1738
   1739static __poll_t xillybus_poll(struct file *filp, poll_table *wait)
   1740{
   1741	struct xilly_channel *channel = filp->private_data;
   1742	__poll_t mask = 0;
   1743	unsigned long flags;
   1744
   1745	poll_wait(filp, &channel->endpoint->ep_wait, wait);
   1746
   1747	/*
   1748	 * poll() won't play ball regarding read() channels which
   1749	 * aren't asynchronous and support the nonempty message. Allowing
   1750	 * that will create situations where data has been delivered at
   1751	 * the FPGA, and users expecting select() to wake up, which it may
   1752	 * not.
   1753	 */
   1754
   1755	if (!channel->wr_synchronous && channel->wr_supports_nonempty) {
   1756		poll_wait(filp, &channel->wr_wait, wait);
   1757		poll_wait(filp, &channel->wr_ready_wait, wait);
   1758
   1759		spin_lock_irqsave(&channel->wr_spinlock, flags);
   1760		if (!channel->wr_empty || channel->wr_ready)
   1761			mask |= EPOLLIN | EPOLLRDNORM;
   1762
   1763		if (channel->wr_hangup)
   1764			/*
   1765			 * Not EPOLLHUP, because its behavior is in the
   1766			 * mist, and EPOLLIN does what we want: Wake up
   1767			 * the read file descriptor so it sees EOF.
   1768			 */
   1769			mask |=  EPOLLIN | EPOLLRDNORM;
   1770		spin_unlock_irqrestore(&channel->wr_spinlock, flags);
   1771	}
   1772
   1773	/*
   1774	 * If partial data write is disallowed on a write() channel,
   1775	 * it's pointless to ever signal OK to write, because is could
   1776	 * block despite some space being available.
   1777	 */
   1778
   1779	if (channel->rd_allow_partial) {
   1780		poll_wait(filp, &channel->rd_wait, wait);
   1781
   1782		spin_lock_irqsave(&channel->rd_spinlock, flags);
   1783		if (!channel->rd_full)
   1784			mask |= EPOLLOUT | EPOLLWRNORM;
   1785		spin_unlock_irqrestore(&channel->rd_spinlock, flags);
   1786	}
   1787
   1788	if (channel->endpoint->fatal_error)
   1789		mask |= EPOLLERR;
   1790
   1791	return mask;
   1792}
   1793
   1794static const struct file_operations xillybus_fops = {
   1795	.owner      = THIS_MODULE,
   1796	.read       = xillybus_read,
   1797	.write      = xillybus_write,
   1798	.open       = xillybus_open,
   1799	.flush      = xillybus_flush,
   1800	.release    = xillybus_release,
   1801	.llseek     = xillybus_llseek,
   1802	.poll       = xillybus_poll,
   1803};
   1804
   1805struct xilly_endpoint *xillybus_init_endpoint(struct device *dev)
   1806{
   1807	struct xilly_endpoint *endpoint;
   1808
   1809	endpoint = devm_kzalloc(dev, sizeof(*endpoint), GFP_KERNEL);
   1810	if (!endpoint)
   1811		return NULL;
   1812
   1813	endpoint->dev = dev;
   1814	endpoint->msg_counter = 0x0b;
   1815	endpoint->failed_messages = 0;
   1816	endpoint->fatal_error = 0;
   1817
   1818	init_waitqueue_head(&endpoint->ep_wait);
   1819	mutex_init(&endpoint->register_mutex);
   1820
   1821	return endpoint;
   1822}
   1823EXPORT_SYMBOL(xillybus_init_endpoint);
   1824
   1825static int xilly_quiesce(struct xilly_endpoint *endpoint)
   1826{
   1827	long t;
   1828
   1829	endpoint->idtlen = -1;
   1830
   1831	iowrite32((u32) (endpoint->dma_using_dac & 0x0001),
   1832		  endpoint->registers + fpga_dma_control_reg);
   1833
   1834	t = wait_event_interruptible_timeout(endpoint->ep_wait,
   1835					     (endpoint->idtlen >= 0),
   1836					     XILLY_TIMEOUT);
   1837	if (t <= 0) {
   1838		dev_err(endpoint->dev,
   1839			"Failed to quiesce the device on exit.\n");
   1840		return -ENODEV;
   1841	}
   1842	return 0;
   1843}
   1844
   1845int xillybus_endpoint_discovery(struct xilly_endpoint *endpoint)
   1846{
   1847	int rc;
   1848	long t;
   1849
   1850	void *bootstrap_resources;
   1851	int idtbuffersize = (1 << PAGE_SHIFT);
   1852	struct device *dev = endpoint->dev;
   1853
   1854	/*
   1855	 * The bogus IDT is used during bootstrap for allocating the initial
   1856	 * message buffer, and then the message buffer and space for the IDT
   1857	 * itself. The initial message buffer is of a single page's size, but
   1858	 * it's soon replaced with a more modest one (and memory is freed).
   1859	 */
   1860
   1861	unsigned char bogus_idt[8] = { 1, 224, (PAGE_SHIFT)-2, 0,
   1862				       3, 192, PAGE_SHIFT, 0 };
   1863	struct xilly_idt_handle idt_handle;
   1864
   1865	/*
   1866	 * Writing the value 0x00000001 to Endianness register signals which
   1867	 * endianness this processor is using, so the FPGA can swap words as
   1868	 * necessary.
   1869	 */
   1870
   1871	iowrite32(1, endpoint->registers + fpga_endian_reg);
   1872
   1873	/* Bootstrap phase I: Allocate temporary message buffer */
   1874
   1875	bootstrap_resources = devres_open_group(dev, NULL, GFP_KERNEL);
   1876	if (!bootstrap_resources)
   1877		return -ENOMEM;
   1878
   1879	endpoint->num_channels = 0;
   1880
   1881	rc = xilly_setupchannels(endpoint, bogus_idt, 1);
   1882	if (rc)
   1883		return rc;
   1884
   1885	/* Clear the message subsystem (and counter in particular) */
   1886	iowrite32(0x04, endpoint->registers + fpga_msg_ctrl_reg);
   1887
   1888	endpoint->idtlen = -1;
   1889
   1890	/*
   1891	 * Set DMA 32/64 bit mode, quiesce the device (?!) and get IDT
   1892	 * buffer size.
   1893	 */
   1894	iowrite32((u32) (endpoint->dma_using_dac & 0x0001),
   1895		  endpoint->registers + fpga_dma_control_reg);
   1896
   1897	t = wait_event_interruptible_timeout(endpoint->ep_wait,
   1898					     (endpoint->idtlen >= 0),
   1899					     XILLY_TIMEOUT);
   1900	if (t <= 0) {
   1901		dev_err(endpoint->dev, "No response from FPGA. Aborting.\n");
   1902		return -ENODEV;
   1903	}
   1904
   1905	/* Enable DMA */
   1906	iowrite32((u32) (0x0002 | (endpoint->dma_using_dac & 0x0001)),
   1907		  endpoint->registers + fpga_dma_control_reg);
   1908
   1909	/* Bootstrap phase II: Allocate buffer for IDT and obtain it */
   1910	while (endpoint->idtlen >= idtbuffersize) {
   1911		idtbuffersize *= 2;
   1912		bogus_idt[6]++;
   1913	}
   1914
   1915	endpoint->num_channels = 1;
   1916
   1917	rc = xilly_setupchannels(endpoint, bogus_idt, 2);
   1918	if (rc)
   1919		goto failed_idt;
   1920
   1921	rc = xilly_obtain_idt(endpoint);
   1922	if (rc)
   1923		goto failed_idt;
   1924
   1925	rc = xilly_scan_idt(endpoint, &idt_handle);
   1926	if (rc)
   1927		goto failed_idt;
   1928
   1929	devres_close_group(dev, bootstrap_resources);
   1930
   1931	/* Bootstrap phase III: Allocate buffers according to IDT */
   1932
   1933	rc = xilly_setupchannels(endpoint,
   1934				 idt_handle.chandesc,
   1935				 idt_handle.entries);
   1936	if (rc)
   1937		goto failed_idt;
   1938
   1939	rc = xillybus_init_chrdev(dev, &xillybus_fops,
   1940				  endpoint->owner, endpoint,
   1941				  idt_handle.names,
   1942				  idt_handle.names_len,
   1943				  endpoint->num_channels,
   1944				  xillyname, false);
   1945
   1946	if (rc)
   1947		goto failed_idt;
   1948
   1949	devres_release_group(dev, bootstrap_resources);
   1950
   1951	return 0;
   1952
   1953failed_idt:
   1954	xilly_quiesce(endpoint);
   1955	flush_workqueue(xillybus_wq);
   1956
   1957	return rc;
   1958}
   1959EXPORT_SYMBOL(xillybus_endpoint_discovery);
   1960
   1961void xillybus_endpoint_remove(struct xilly_endpoint *endpoint)
   1962{
   1963	xillybus_cleanup_chrdev(endpoint, endpoint->dev);
   1964
   1965	xilly_quiesce(endpoint);
   1966
   1967	/*
   1968	 * Flushing is done upon endpoint release to prevent access to memory
   1969	 * just about to be released. This makes the quiesce complete.
   1970	 */
   1971	flush_workqueue(xillybus_wq);
   1972}
   1973EXPORT_SYMBOL(xillybus_endpoint_remove);
   1974
   1975static int __init xillybus_init(void)
   1976{
   1977	xillybus_wq = alloc_workqueue(xillyname, 0, 0);
   1978	if (!xillybus_wq)
   1979		return -ENOMEM;
   1980
   1981	return 0;
   1982}
   1983
   1984static void __exit xillybus_exit(void)
   1985{
   1986	/* flush_workqueue() was called for each endpoint released */
   1987	destroy_workqueue(xillybus_wq);
   1988}
   1989
   1990module_init(xillybus_init);
   1991module_exit(xillybus_exit);