You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
[PATCH] pcmcia: embed dev_link_t into struct pcmcia_device
Embed dev_link_t into struct pcmcia_device(), as they basically address the same entity. The actual contents of dev_link_t will be cleaned up step by step. This patch includes a bugfix from and signed-off-by Andrew Morton. Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
@@ -46,7 +46,7 @@
|
||||
/* #define ATR_CSUM */
|
||||
|
||||
#ifdef PCMCIA_DEBUG
|
||||
#define reader_to_dev(x) (&handle_to_dev(x->link.handle))
|
||||
#define reader_to_dev(x) (&handle_to_dev(x->p_dev->handle))
|
||||
static int pc_debug = PCMCIA_DEBUG;
|
||||
module_param(pc_debug, int, 0600);
|
||||
#define DEBUGP(n, rdr, x, args...) do { \
|
||||
@@ -106,7 +106,7 @@ static int major; /* major number we get from the kernel */
|
||||
#define REG_STOPBITS(x) (x + 7)
|
||||
|
||||
struct cm4000_dev {
|
||||
dev_link_t link; /* pcmcia link */
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node; /* OS node (major,minor) */
|
||||
|
||||
unsigned char atr[MAX_ATR];
|
||||
@@ -454,7 +454,7 @@ static struct card_fixup card_fixups[] = {
|
||||
static void set_cardparameter(struct cm4000_dev *dev)
|
||||
{
|
||||
int i;
|
||||
ioaddr_t iobase = dev->link.io.BasePort1;
|
||||
ioaddr_t iobase = dev->p_dev->io.BasePort1;
|
||||
u_int8_t stopbits = 0x02; /* ISO default */
|
||||
|
||||
DEBUGP(3, dev, "-> set_cardparameter\n");
|
||||
@@ -487,7 +487,7 @@ static int set_protocol(struct cm4000_dev *dev, struct ptsreq *ptsreq)
|
||||
unsigned short num_bytes_read;
|
||||
unsigned char pts_reply[4];
|
||||
ssize_t rc;
|
||||
ioaddr_t iobase = dev->link.io.BasePort1;
|
||||
ioaddr_t iobase = dev->p_dev->io.BasePort1;
|
||||
|
||||
rc = 0;
|
||||
|
||||
@@ -699,7 +699,7 @@ static void terminate_monitor(struct cm4000_dev *dev)
|
||||
static void monitor_card(unsigned long p)
|
||||
{
|
||||
struct cm4000_dev *dev = (struct cm4000_dev *) p;
|
||||
ioaddr_t iobase = dev->link.io.BasePort1;
|
||||
ioaddr_t iobase = dev->p_dev->io.BasePort1;
|
||||
unsigned short s;
|
||||
struct ptsreq ptsreq;
|
||||
int i, atrc;
|
||||
@@ -962,7 +962,7 @@ static ssize_t cmm_read(struct file *filp, __user char *buf, size_t count,
|
||||
loff_t *ppos)
|
||||
{
|
||||
struct cm4000_dev *dev = filp->private_data;
|
||||
ioaddr_t iobase = dev->link.io.BasePort1;
|
||||
ioaddr_t iobase = dev->p_dev->io.BasePort1;
|
||||
ssize_t rc;
|
||||
int i, j, k;
|
||||
|
||||
@@ -971,7 +971,7 @@ static ssize_t cmm_read(struct file *filp, __user char *buf, size_t count,
|
||||
if (count == 0) /* according to manpage */
|
||||
return 0;
|
||||
|
||||
if ((dev->link.state & DEV_PRESENT) == 0 || /* socket removed */
|
||||
if ((dev->p_dev->state & DEV_PRESENT) == 0 || /* socket removed */
|
||||
test_bit(IS_CMM_ABSENT, &dev->flags))
|
||||
return -ENODEV;
|
||||
|
||||
@@ -1083,7 +1083,7 @@ static ssize_t cmm_write(struct file *filp, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct cm4000_dev *dev = (struct cm4000_dev *) filp->private_data;
|
||||
ioaddr_t iobase = dev->link.io.BasePort1;
|
||||
ioaddr_t iobase = dev->p_dev->io.BasePort1;
|
||||
unsigned short s;
|
||||
unsigned char tmp;
|
||||
unsigned char infolen;
|
||||
@@ -1108,7 +1108,7 @@ static ssize_t cmm_write(struct file *filp, const char __user *buf,
|
||||
|
||||
sendT0 = dev->proto ? 0 : nr > 5 ? 0x08 : 0;
|
||||
|
||||
if ((dev->link.state & DEV_PRESENT) == 0 || /* socket removed */
|
||||
if ((dev->p_dev->state & DEV_PRESENT) == 0 || /* socket removed */
|
||||
test_bit(IS_CMM_ABSENT, &dev->flags))
|
||||
return -ENODEV;
|
||||
|
||||
@@ -1440,7 +1440,7 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct cm4000_dev *dev = filp->private_data;
|
||||
ioaddr_t iobase = dev->link.io.BasePort1;
|
||||
ioaddr_t iobase = dev->p_dev->io.BasePort1;
|
||||
dev_link_t *link;
|
||||
int size;
|
||||
int rc;
|
||||
@@ -1844,7 +1844,7 @@ static void cm4000_config(dev_link_t * link, int devno)
|
||||
dev->node.major = major;
|
||||
dev->node.minor = devno;
|
||||
dev->node.next = NULL;
|
||||
link->dev = &dev->node;
|
||||
link->dev_node = &dev->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
|
||||
return;
|
||||
@@ -1889,8 +1889,8 @@ static void cm4000_release(dev_link_t *link)
|
||||
static int cm4000_attach(struct pcmcia_device *p_dev)
|
||||
{
|
||||
struct cm4000_dev *dev;
|
||||
dev_link_t *link;
|
||||
int i;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
for (i = 0; i < CM4000_MAX_DEV; i++)
|
||||
if (dev_table[i] == NULL)
|
||||
@@ -1906,7 +1906,7 @@ static int cm4000_attach(struct pcmcia_device *p_dev)
|
||||
if (dev == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
link = &dev->link;
|
||||
dev->p_dev = p_dev;
|
||||
link->priv = dev;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
dev_table[i] = link;
|
||||
@@ -1916,9 +1916,6 @@ static int cm4000_attach(struct pcmcia_device *p_dev)
|
||||
init_waitqueue_head(&dev->atrq);
|
||||
init_waitqueue_head(&dev->readq);
|
||||
|
||||
link->handle = p_dev;
|
||||
p_dev->instance = link;
|
||||
|
||||
link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
|
||||
cm4000_config(link, i);
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
|
||||
#ifdef PCMCIA_DEBUG
|
||||
#define reader_to_dev(x) (&handle_to_dev(x->link.handle))
|
||||
#define reader_to_dev(x) (&handle_to_dev(x->p_dev->handle))
|
||||
static int pc_debug = PCMCIA_DEBUG;
|
||||
module_param(pc_debug, int, 0600);
|
||||
#define DEBUGP(n, rdr, x, args...) do { \
|
||||
@@ -74,7 +74,7 @@ static struct class *cmx_class;
|
||||
#define BS_WRITABLE 0x02
|
||||
|
||||
struct reader_dev {
|
||||
dev_link_t link;
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
wait_queue_head_t devq;
|
||||
wait_queue_head_t poll_wait;
|
||||
@@ -116,7 +116,7 @@ static inline unsigned char xinb(unsigned short port)
|
||||
static void cm4040_do_poll(unsigned long dummy)
|
||||
{
|
||||
struct reader_dev *dev = (struct reader_dev *) dummy;
|
||||
unsigned int obs = xinb(dev->link.io.BasePort1
|
||||
unsigned int obs = xinb(dev->p_dev->io.BasePort1
|
||||
+ REG_OFFSET_BUFFER_STATUS);
|
||||
|
||||
if ((obs & BSR_BULK_IN_FULL)) {
|
||||
@@ -147,7 +147,7 @@ static void cm4040_stop_poll(struct reader_dev *dev)
|
||||
static int wait_for_bulk_out_ready(struct reader_dev *dev)
|
||||
{
|
||||
int i, rc;
|
||||
int iobase = dev->link.io.BasePort1;
|
||||
int iobase = dev->p_dev->io.BasePort1;
|
||||
|
||||
for (i = 0; i < POLL_LOOP_COUNT; i++) {
|
||||
if ((xinb(iobase + REG_OFFSET_BUFFER_STATUS)
|
||||
@@ -177,7 +177,7 @@ static int wait_for_bulk_out_ready(struct reader_dev *dev)
|
||||
/* Write to Sync Control Register */
|
||||
static int write_sync_reg(unsigned char val, struct reader_dev *dev)
|
||||
{
|
||||
int iobase = dev->link.io.BasePort1;
|
||||
int iobase = dev->p_dev->io.BasePort1;
|
||||
int rc;
|
||||
|
||||
rc = wait_for_bulk_out_ready(dev);
|
||||
@@ -195,7 +195,7 @@ static int write_sync_reg(unsigned char val, struct reader_dev *dev)
|
||||
static int wait_for_bulk_in_ready(struct reader_dev *dev)
|
||||
{
|
||||
int i, rc;
|
||||
int iobase = dev->link.io.BasePort1;
|
||||
int iobase = dev->p_dev->io.BasePort1;
|
||||
|
||||
for (i = 0; i < POLL_LOOP_COUNT; i++) {
|
||||
if ((xinb(iobase + REG_OFFSET_BUFFER_STATUS)
|
||||
@@ -225,7 +225,7 @@ static ssize_t cm4040_read(struct file *filp, char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct reader_dev *dev = filp->private_data;
|
||||
int iobase = dev->link.io.BasePort1;
|
||||
int iobase = dev->p_dev->io.BasePort1;
|
||||
size_t bytes_to_read;
|
||||
unsigned long i;
|
||||
size_t min_bytes_to_read;
|
||||
@@ -246,7 +246,7 @@ static ssize_t cm4040_read(struct file *filp, char __user *buf,
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
if ((dev->link.state & DEV_PRESENT)==0)
|
||||
if ((dev->p_dev->state & DEV_PRESENT)==0)
|
||||
return -ENODEV;
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
@@ -328,7 +328,7 @@ static ssize_t cm4040_write(struct file *filp, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct reader_dev *dev = filp->private_data;
|
||||
int iobase = dev->link.io.BasePort1;
|
||||
int iobase = dev->p_dev->io.BasePort1;
|
||||
ssize_t rc;
|
||||
int i;
|
||||
unsigned int bytes_to_write;
|
||||
@@ -351,7 +351,7 @@ static ssize_t cm4040_write(struct file *filp, const char __user *buf,
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
if ((dev->link.state & DEV_PRESENT) == 0)
|
||||
if ((dev->p_dev->state & DEV_PRESENT) == 0)
|
||||
return -ENODEV;
|
||||
|
||||
bytes_to_write = count;
|
||||
@@ -606,7 +606,7 @@ static void reader_config(dev_link_t *link, int devno)
|
||||
dev->node.major = major;
|
||||
dev->node.minor = devno;
|
||||
dev->node.next = NULL;
|
||||
link->dev = &dev->node;
|
||||
link->dev_node = &dev->node;
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
|
||||
DEBUGP(2, dev, "device " DEVICE_NAME "%d at 0x%.4x-0x%.4x\n", devno,
|
||||
@@ -631,8 +631,8 @@ static void reader_release(dev_link_t *link)
|
||||
static int reader_attach(struct pcmcia_device *p_dev)
|
||||
{
|
||||
struct reader_dev *dev;
|
||||
dev_link_t *link;
|
||||
int i;
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
for (i = 0; i < CM_MAX_DEV; i++) {
|
||||
if (dev_table[i] == NULL)
|
||||
@@ -649,8 +649,8 @@ static int reader_attach(struct pcmcia_device *p_dev)
|
||||
dev->timeout = CCID_DRIVER_MINIMUM_TIMEOUT;
|
||||
dev->buffer_status = 0;
|
||||
|
||||
link = &dev->link;
|
||||
link->priv = dev;
|
||||
dev->p_dev = p_dev;
|
||||
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
dev_table[i] = link;
|
||||
@@ -662,9 +662,6 @@ static int reader_attach(struct pcmcia_device *p_dev)
|
||||
init_timer(&dev->poll_timer);
|
||||
dev->poll_timer.function = &cm4040_do_poll;
|
||||
|
||||
link->handle = p_dev;
|
||||
p_dev->instance = link;
|
||||
|
||||
link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
|
||||
reader_config(link, i);
|
||||
|
||||
|
||||
@@ -228,7 +228,7 @@ typedef struct _mgslpc_info {
|
||||
struct _input_signal_events input_signal_events;
|
||||
|
||||
/* PCMCIA support */
|
||||
dev_link_t link;
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
int stop;
|
||||
|
||||
@@ -536,11 +536,11 @@ static void ldisc_receive_buf(struct tty_struct *tty,
|
||||
static int mgslpc_attach(struct pcmcia_device *p_dev)
|
||||
{
|
||||
MGSLPC_INFO *info;
|
||||
dev_link_t *link;
|
||||
|
||||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
printk("mgslpc_attach\n");
|
||||
|
||||
|
||||
info = (MGSLPC_INFO *)kmalloc(sizeof(MGSLPC_INFO), GFP_KERNEL);
|
||||
if (!info) {
|
||||
printk("Error can't allocate device instance data\n");
|
||||
@@ -565,22 +565,19 @@ static int mgslpc_attach(struct pcmcia_device *p_dev)
|
||||
info->imrb_value = 0xffff;
|
||||
info->pim_value = 0xff;
|
||||
|
||||
link = &info->link;
|
||||
info->p_dev = p_dev;
|
||||
link->priv = info;
|
||||
|
||||
|
||||
/* Initialize the dev_link_t structure */
|
||||
|
||||
/* Interrupt setup */
|
||||
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
||||
link->irq.IRQInfo1 = IRQ_LEVEL_ID;
|
||||
link->irq.Handler = NULL;
|
||||
|
||||
|
||||
link->conf.Attributes = 0;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
link->handle = p_dev;
|
||||
p_dev->instance = link;
|
||||
|
||||
link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
|
||||
mgslpc_config(link);
|
||||
|
||||
@@ -673,7 +670,7 @@ static void mgslpc_config(dev_link_t *link)
|
||||
/* add to linked list of devices */
|
||||
sprintf(info->node.dev_name, "mgslpc0");
|
||||
info->node.major = info->node.minor = 0;
|
||||
link->dev = &info->node;
|
||||
link->dev_node = &info->node;
|
||||
|
||||
printk(KERN_INFO "%s: index 0x%02x:",
|
||||
info->node.dev_name, link->conf.ConfigIndex);
|
||||
@@ -1259,7 +1256,7 @@ static irqreturn_t mgslpc_isr(int irq, void *dev_id, struct pt_regs * regs)
|
||||
if (!info)
|
||||
return IRQ_NONE;
|
||||
|
||||
if (!(info->link.state & DEV_CONFIG))
|
||||
if (!(info->p_dev->state & DEV_CONFIG))
|
||||
return IRQ_HANDLED;
|
||||
|
||||
spin_lock(&info->lock);
|
||||
|
||||
Reference in New Issue
Block a user