Messages in this thread Patch in this message | | | Date | Sat, 22 Nov 2003 19:22:27 +1100 | Subject | [I810_AUDIO] 4/x: Clean up with macros | From | Herbert Xu <> |
| |
This patch adds a number macros to clean up the code. -- Debian GNU/Linux 3.0 is out! ( http://www.debian.org/ ) Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt Index: kernel-source-2.4/drivers/sound/i810_audio.c =================================================================== RCS file: /home/gondolin/herbert/src/CVS/debian/kernel-source-2.4/drivers/sound/i810_audio.c,v retrieving revision 1.11 diff -u -r1.11 i810_audio.c --- kernel-source-2.4/drivers/sound/i810_audio.c 22 Nov 2003 07:20:03 -0000 1.11 +++ kernel-source-2.4/drivers/sound/i810_audio.c 22 Nov 2003 08:17:09 -0000 @@ -143,6 +143,9 @@ #define PCI_DEVICE_ID_AMD_8111_AC97 0x746d #endif +#define MODULOP2(a, b) ((a) & ((b) - 1)) +#define MASKP2(a, b) ((a) & ~((b) - 1)) + static int ftsodell=0; static int strict_clocking=0; static unsigned int clocking=0; @@ -204,6 +207,7 @@ #define ENUM_ENGINE(PRE,DIG) \ enum { \ + PRE##_BASE = 0x##DIG##0, /* Base Address */ \ PRE##_BDBAR = 0x##DIG##0, /* Buffer Descriptor list Base Address */ \ PRE##_CIV = 0x##DIG##4, /* Current Index Value */ \ PRE##_LVI = 0x##DIG##5, /* Last Valid Index */ \ @@ -481,8 +485,12 @@ /* extract register offset from codec struct */ #define IO_REG_OFF(codec) (((struct i810_card *) codec->private_data)->ac97_id_map[codec->id]) +#define GET_CIV(port) MODULOP2(inb((port) + OFF_CIV), SG_LEN) +#define GET_LVI(port) MODULOP2(inb((port) + OFF_LVI), SG_LEN) + /* set LVI from CIV */ -#define CIV_TO_LVI(port, off) outb((inb(port+OFF_CIV)+off) & 31, port+OFF_LVI) +#define CIV_TO_LVI(port, off) \ + outb(MODULOP2(GET_CIV((port)) + (off), SG_LEN), (port) + OFF_LVI) static struct i810_card *devs = NULL; @@ -752,7 +760,7 @@ port_picb = port + OFF_PICB; do { - civ = inb(port+OFF_CIV) & 31; + civ = GET_CIV(port); offset = inw(port_picb); /* Must have a delay here! */ if(offset == 0) @@ -772,7 +780,7 @@ * that we won't have to worry about the chip still being * out of sync with reality ;-) */ - } while (civ != (inb(port+OFF_CIV) & 31) || offset != inw(port_picb)); + } while (civ != GET_CIV(port) || offset != inw(port_picb)); return (((civ + 1) * dmabuf->fragsize - (bytes * offset)) % dmabuf->dmasize); @@ -1124,8 +1132,8 @@ /* this is normal for the end of a read */ /* only give an error if we went past the */ /* last valid sg entry */ - if((inb(state->card->iobase + PI_CIV) & 31) != - (inb(state->card->iobase + PI_LVI) & 31)) { + if (GET_CIV(state->card->iobase + PI_BASE) != + GET_LVI(state->card->iobase + PI_BASE)) { printk(KERN_WARNING "i810_audio: DMA overrun on read\n"); dmabuf->error++; } @@ -1149,13 +1157,13 @@ /* this is normal for the end of a write */ /* only give an error if we went past the */ /* last valid sg entry */ - if((inb(state->card->iobase + PO_CIV) & 31) != - (inb(state->card->iobase + PO_LVI) & 31)) { + if (GET_CIV(state->card->iobase + PO_BASE) != + GET_LVI(state->card->iobase + PO_BASE)) { printk(KERN_WARNING "i810_audio: DMA overrun on write\n"); printk("i810_audio: CIV %d, LVI %d, hwptr %x, " "count %d\n", - inb(state->card->iobase + PO_CIV) & 31, - inb(state->card->iobase + PO_LVI) & 31, + GET_CIV(state->card->iobase + PO_BASE), + GET_LVI(state->card->iobase + PO_BASE), dmabuf->hwptr, dmabuf->count); dmabuf->error++; } @@ -3042,7 +3050,7 @@ goto config_out; } dmabuf->count = dmabuf->dmasize; - CIV_TO_LVI(card->iobase+dmabuf->write_channel->port, 31); + CIV_TO_LVI(card->iobase+dmabuf->write_channel->port, -1); save_flags(flags); cli(); start_dac(state); | |