Commit f45017ba authored by Erik Arfvidson's avatar Erik Arfvidson Committed by Greg Kroah-Hartman

staging: unisys: remove charqueue.c

This patch removes charqueue.[ch] since it no longer called
Signed-off-by: default avatarErik Arfvidson <erik.arfvidson@unisys.com>
Signed-off-by: default avatarBenjamin Romer <benjamin.romer@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d5b3f1dc
......@@ -4,6 +4,6 @@
obj-$(CONFIG_UNISYS_VISORUTIL) += visorutil.o
visorutil-y := charqueue.o periodic_work.o
visorutil-y := periodic_work.o
ccflags-y += -Idrivers/staging/unisys/include
/* charqueue.c
*
* Copyright (C) 2010 - 2013 UNISYS CORPORATION
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
* NON INFRINGEMENT. See the GNU General Public License for more
* details.
*/
/*
* Simple character queue implementation for Linux kernel mode.
*/
#include "charqueue.h"
#define MYDRVNAME "charqueue"
#define IS_EMPTY(charqueue) (charqueue->head == charqueue->tail)
struct charqueue {
int alloc_size;
int nslots;
spinlock_t lock; /* read/write lock for this structure */
int head, tail;
unsigned char buf[0];
};
struct charqueue *visor_charqueue_create(ulong nslots)
{
int alloc_size = sizeof(struct charqueue) + nslots + 1;
struct charqueue *cq;
cq = kmalloc(alloc_size, GFP_KERNEL|__GFP_NORETRY);
if (cq == NULL)
return NULL;
cq->alloc_size = alloc_size;
cq->nslots = nslots;
cq->head = 0;
cq->tail = 0;
spin_lock_init(&cq->lock);
return cq;
}
EXPORT_SYMBOL_GPL(visor_charqueue_create);
void visor_charqueue_enqueue(struct charqueue *charqueue, unsigned char c)
{
int alloc_slots = charqueue->nslots+1; /* 1 slot is always empty */
spin_lock(&charqueue->lock);
charqueue->head = (charqueue->head+1) % alloc_slots;
if (charqueue->head == charqueue->tail)
/* overflow; overwrite the oldest entry */
charqueue->tail = (charqueue->tail+1) % alloc_slots;
charqueue->buf[charqueue->head] = c;
spin_unlock(&charqueue->lock);
}
EXPORT_SYMBOL_GPL(visor_charqueue_enqueue);
bool visor_charqueue_is_empty(struct charqueue *charqueue)
{
bool b;
spin_lock(&charqueue->lock);
b = IS_EMPTY(charqueue);
spin_unlock(&charqueue->lock);
return b;
}
EXPORT_SYMBOL_GPL(visor_charqueue_is_empty);
static int charqueue_dequeue_1(struct charqueue *charqueue)
{
int alloc_slots = charqueue->nslots + 1; /* 1 slot is always empty */
if (IS_EMPTY(charqueue))
return -1;
charqueue->tail = (charqueue->tail+1) % alloc_slots;
return charqueue->buf[charqueue->tail];
}
int charqueue_dequeue(struct charqueue *charqueue)
{
int rc;
spin_lock(&charqueue->lock);
rc = charqueue_dequeue_1(charqueue);
spin_unlock(&charqueue->lock);
return rc;
}
int visor_charqueue_dequeue_n(struct charqueue *charqueue, unsigned char *buf,
int n)
{
int rc, counter = 0, c;
spin_lock(&charqueue->lock);
for (;;) {
if (n <= 0)
break; /* no more buffer space */
c = charqueue_dequeue_1(charqueue);
if (c < 0)
break; /* no more input */
*buf = (unsigned char)(c);
buf++;
n--;
counter++;
}
rc = counter;
spin_unlock(&charqueue->lock);
return rc;
}
EXPORT_SYMBOL_GPL(visor_charqueue_dequeue_n);
void visor_charqueue_destroy(struct charqueue *charqueue)
{
if (charqueue == NULL)
return;
kfree(charqueue);
}
EXPORT_SYMBOL_GPL(visor_charqueue_destroy);
/* charqueue.h
*
* Copyright (C) 2010 - 2013 UNISYS CORPORATION
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
* NON INFRINGEMENT. See the GNU General Public License for more
* details.
*/
#ifndef __CHARQUEUE_H__
#define __CHARQUEUE_H__
#include "timskmod.h"
/* struct charqueue is an opaque structure to users.
* Fields are declared only in the implementation .c files.
*/
struct charqueue;
struct charqueue *visor_charqueue_create(ulong nslots);
void visor_charqueue_enqueue(struct charqueue *charqueue, unsigned char c);
int charqueue_dequeue(struct charqueue *charqueue);
int visor_charqueue_dequeue_n(struct charqueue *charqueue, unsigned char *buf,
int n);
bool visor_charqueue_is_empty(struct charqueue *charqueue);
void visor_charqueue_destroy(struct charqueue *charqueue);
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment