Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394...
[sfrench/cifs-2.6.git] / arch / powerpc / sysdev / qe_lib / ucc_fast.c
index 66137bf2dfb0ffb2c78a1613cd62079d6f447b38..bcf88e6ce962c872819d86cde1cfd22fb76f0953 100644 (file)
@@ -18,6 +18,8 @@
 #include <linux/slab.h>
 #include <linux/stddef.h>
 #include <linux/interrupt.h>
+#include <linux/err.h>
+#include <linux/module.h>
 
 #include <asm/io.h>
 #include <asm/immap_qe.h>
 
 void ucc_fast_dump_regs(struct ucc_fast_private * uccf)
 {
-       printk(KERN_INFO "UCC%d Fast registers:", uccf->uf_info->ucc_num);
-       printk(KERN_INFO "Base address: 0x%08x", (u32) uccf->uf_regs);
-
-       printk(KERN_INFO "gumr  : addr - 0x%08x, val - 0x%08x",
-                 (u32) & uccf->uf_regs->gumr, in_be32(&uccf->uf_regs->gumr));
-       printk(KERN_INFO "upsmr : addr - 0x%08x, val - 0x%08x",
-                 (u32) & uccf->uf_regs->upsmr, in_be32(&uccf->uf_regs->upsmr));
-       printk(KERN_INFO "utodr : addr - 0x%08x, val - 0x%04x",
-                 (u32) & uccf->uf_regs->utodr, in_be16(&uccf->uf_regs->utodr));
-       printk(KERN_INFO "udsr  : addr - 0x%08x, val - 0x%04x",
-                 (u32) & uccf->uf_regs->udsr, in_be16(&uccf->uf_regs->udsr));
-       printk(KERN_INFO "ucce  : addr - 0x%08x, val - 0x%08x",
-                 (u32) & uccf->uf_regs->ucce, in_be32(&uccf->uf_regs->ucce));
-       printk(KERN_INFO "uccm  : addr - 0x%08x, val - 0x%08x",
-                 (u32) & uccf->uf_regs->uccm, in_be32(&uccf->uf_regs->uccm));
-       printk(KERN_INFO "uccs  : addr - 0x%08x, val - 0x%02x",
-                 (u32) & uccf->uf_regs->uccs, uccf->uf_regs->uccs);
-       printk(KERN_INFO "urfb  : addr - 0x%08x, val - 0x%08x",
-                 (u32) & uccf->uf_regs->urfb, in_be32(&uccf->uf_regs->urfb));
-       printk(KERN_INFO "urfs  : addr - 0x%08x, val - 0x%04x",
-                 (u32) & uccf->uf_regs->urfs, in_be16(&uccf->uf_regs->urfs));
-       printk(KERN_INFO "urfet : addr - 0x%08x, val - 0x%04x",
-                 (u32) & uccf->uf_regs->urfet, in_be16(&uccf->uf_regs->urfet));
-       printk(KERN_INFO "urfset: addr - 0x%08x, val - 0x%04x",
-                 (u32) & uccf->uf_regs->urfset,
-                 in_be16(&uccf->uf_regs->urfset));
-       printk(KERN_INFO "utfb  : addr - 0x%08x, val - 0x%08x",
-                 (u32) & uccf->uf_regs->utfb, in_be32(&uccf->uf_regs->utfb));
-       printk(KERN_INFO "utfs  : addr - 0x%08x, val - 0x%04x",
-                 (u32) & uccf->uf_regs->utfs, in_be16(&uccf->uf_regs->utfs));
-       printk(KERN_INFO "utfet : addr - 0x%08x, val - 0x%04x",
-                 (u32) & uccf->uf_regs->utfet, in_be16(&uccf->uf_regs->utfet));
-       printk(KERN_INFO "utftt : addr - 0x%08x, val - 0x%04x",
-                 (u32) & uccf->uf_regs->utftt, in_be16(&uccf->uf_regs->utftt));
-       printk(KERN_INFO "utpt  : addr - 0x%08x, val - 0x%04x",
-                 (u32) & uccf->uf_regs->utpt, in_be16(&uccf->uf_regs->utpt));
-       printk(KERN_INFO "urtry : addr - 0x%08x, val - 0x%08x",
-                 (u32) & uccf->uf_regs->urtry, in_be32(&uccf->uf_regs->urtry));
-       printk(KERN_INFO "guemr : addr - 0x%08x, val - 0x%02x",
-                 (u32) & uccf->uf_regs->guemr, uccf->uf_regs->guemr);
+       printk(KERN_INFO "UCC%u Fast registers:\n", uccf->uf_info->ucc_num);
+       printk(KERN_INFO "Base address: 0x%p\n", uccf->uf_regs);
+
+       printk(KERN_INFO "gumr  : addr=0x%p, val=0x%08x\n",
+                 &uccf->uf_regs->gumr, in_be32(&uccf->uf_regs->gumr));
+       printk(KERN_INFO "upsmr : addr=0x%p, val=0x%08x\n",
+                 &uccf->uf_regs->upsmr, in_be32(&uccf->uf_regs->upsmr));
+       printk(KERN_INFO "utodr : addr=0x%p, val=0x%04x\n",
+                 &uccf->uf_regs->utodr, in_be16(&uccf->uf_regs->utodr));
+       printk(KERN_INFO "udsr  : addr=0x%p, val=0x%04x\n",
+                 &uccf->uf_regs->udsr, in_be16(&uccf->uf_regs->udsr));
+       printk(KERN_INFO "ucce  : addr=0x%p, val=0x%08x\n",
+                 &uccf->uf_regs->ucce, in_be32(&uccf->uf_regs->ucce));
+       printk(KERN_INFO "uccm  : addr=0x%p, val=0x%08x\n",
+                 &uccf->uf_regs->uccm, in_be32(&uccf->uf_regs->uccm));
+       printk(KERN_INFO "uccs  : addr=0x%p, val=0x%02x\n",
+                 &uccf->uf_regs->uccs, uccf->uf_regs->uccs);
+       printk(KERN_INFO "urfb  : addr=0x%p, val=0x%08x\n",
+                 &uccf->uf_regs->urfb, in_be32(&uccf->uf_regs->urfb));
+       printk(KERN_INFO "urfs  : addr=0x%p, val=0x%04x\n",
+                 &uccf->uf_regs->urfs, in_be16(&uccf->uf_regs->urfs));
+       printk(KERN_INFO "urfet : addr=0x%p, val=0x%04x\n",
+                 &uccf->uf_regs->urfet, in_be16(&uccf->uf_regs->urfet));
+       printk(KERN_INFO "urfset: addr=0x%p, val=0x%04x\n",
+                 &uccf->uf_regs->urfset, in_be16(&uccf->uf_regs->urfset));
+       printk(KERN_INFO "utfb  : addr=0x%p, val=0x%08x\n",
+                 &uccf->uf_regs->utfb, in_be32(&uccf->uf_regs->utfb));
+       printk(KERN_INFO "utfs  : addr=0x%p, val=0x%04x\n",
+                 &uccf->uf_regs->utfs, in_be16(&uccf->uf_regs->utfs));
+       printk(KERN_INFO "utfet : addr=0x%p, val=0x%04x\n",
+                 &uccf->uf_regs->utfet, in_be16(&uccf->uf_regs->utfet));
+       printk(KERN_INFO "utftt : addr=0x%p, val=0x%04x\n",
+                 &uccf->uf_regs->utftt, in_be16(&uccf->uf_regs->utftt));
+       printk(KERN_INFO "utpt  : addr=0x%p, val=0x%04x\n",
+                 &uccf->uf_regs->utpt, in_be16(&uccf->uf_regs->utpt));
+       printk(KERN_INFO "urtry : addr=0x%p, val=0x%08x\n",
+                 &uccf->uf_regs->urtry, in_be32(&uccf->uf_regs->urtry));
+       printk(KERN_INFO "guemr : addr=0x%p, val=0x%02x\n",
+                 &uccf->uf_regs->guemr, uccf->uf_regs->guemr);
 }
+EXPORT_SYMBOL(ucc_fast_dump_regs);
 
 u32 ucc_fast_get_qe_cr_subblock(int uccf_num)
 {
@@ -84,11 +86,13 @@ u32 ucc_fast_get_qe_cr_subblock(int uccf_num)
        default: return QE_CR_SUBBLOCK_INVALID;
        }
 }
+EXPORT_SYMBOL(ucc_fast_get_qe_cr_subblock);
 
 void ucc_fast_transmit_on_demand(struct ucc_fast_private * uccf)
 {
        out_be16(&uccf->uf_regs->utodr, UCC_FAST_TOD);
 }
+EXPORT_SYMBOL(ucc_fast_transmit_on_demand);
 
 void ucc_fast_enable(struct ucc_fast_private * uccf, enum comm_dir mode)
 {
@@ -109,6 +113,7 @@ void ucc_fast_enable(struct ucc_fast_private * uccf, enum comm_dir mode)
        }
        out_be32(&uf_regs->gumr, gumr);
 }
+EXPORT_SYMBOL(ucc_fast_enable);
 
 void ucc_fast_disable(struct ucc_fast_private * uccf, enum comm_dir mode)
 {
@@ -129,6 +134,7 @@ void ucc_fast_disable(struct ucc_fast_private * uccf, enum comm_dir mode)
        }
        out_be32(&uf_regs->gumr, gumr);
 }
+EXPORT_SYMBOL(ucc_fast_disable);
 
 int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** uccf_ret)
 {
@@ -142,55 +148,57 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
 
        /* check if the UCC port number is in range. */
        if ((uf_info->ucc_num < 0) || (uf_info->ucc_num > UCC_MAX_NUM - 1)) {
-               printk(KERN_ERR "%s: illegal UCC number", __FUNCTION__);
+               printk(KERN_ERR "%s: illegal UCC number\n", __func__);
                return -EINVAL;
        }
 
        /* Check that 'max_rx_buf_length' is properly aligned (4). */
        if (uf_info->max_rx_buf_length & (UCC_FAST_MRBLR_ALIGNMENT - 1)) {
-               printk(KERN_ERR "%s: max_rx_buf_length not aligned", __FUNCTION__);
+               printk(KERN_ERR "%s: max_rx_buf_length not aligned\n",
+                       __func__);
                return -EINVAL;
        }
 
        /* Validate Virtual Fifo register values */
        if (uf_info->urfs < UCC_FAST_URFS_MIN_VAL) {
-               printk(KERN_ERR "%s: urfs is too small", __FUNCTION__);
+               printk(KERN_ERR "%s: urfs is too small\n", __func__);
                return -EINVAL;
        }
 
        if (uf_info->urfs & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
-               printk(KERN_ERR "%s: urfs is not aligned", __FUNCTION__);
+               printk(KERN_ERR "%s: urfs is not aligned\n", __func__);
                return -EINVAL;
        }
 
        if (uf_info->urfet & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
-               printk(KERN_ERR "%s: urfet is not aligned.", __FUNCTION__);
+               printk(KERN_ERR "%s: urfet is not aligned.\n", __func__);
                return -EINVAL;
        }
 
        if (uf_info->urfset & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
-               printk(KERN_ERR "%s: urfset is not aligned", __FUNCTION__);
+               printk(KERN_ERR "%s: urfset is not aligned\n", __func__);
                return -EINVAL;
        }
 
        if (uf_info->utfs & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
-               printk(KERN_ERR "%s: utfs is not aligned", __FUNCTION__);
+               printk(KERN_ERR "%s: utfs is not aligned\n", __func__);
                return -EINVAL;
        }
 
        if (uf_info->utfet & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
-               printk(KERN_ERR "%s: utfet is not aligned", __FUNCTION__);
+               printk(KERN_ERR "%s: utfet is not aligned\n", __func__);
                return -EINVAL;
        }
 
        if (uf_info->utftt & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
-               printk(KERN_ERR "%s: utftt is not aligned", __FUNCTION__);
+               printk(KERN_ERR "%s: utftt is not aligned\n", __func__);
                return -EINVAL;
        }
 
        uccf = kzalloc(sizeof(struct ucc_fast_private), GFP_KERNEL);
        if (!uccf) {
-               printk(KERN_ERR "%s: Cannot allocate private data", __FUNCTION__);
+               printk(KERN_ERR "%s: Cannot allocate private data\n",
+                       __func__);
                return -ENOMEM;
        }
 
@@ -199,7 +207,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
        /* Set the PHY base address */
        uccf->uf_regs = ioremap(uf_info->regs, sizeof(struct ucc_fast));
        if (uccf->uf_regs == NULL) {
-               printk(KERN_ERR "%s: Cannot map UCC registers", __FUNCTION__);
+               printk(KERN_ERR "%s: Cannot map UCC registers\n", __func__);
                return -ENOMEM;
        }
 
@@ -219,18 +227,10 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
        uccf->rx_discarded = 0;
 #endif                         /* STATISTICS */
 
-       /* Init Guemr register */
-       if ((ret = ucc_init_guemr((struct ucc_common *) (uf_regs)))) {
-               printk(KERN_ERR "%s: cannot init GUEMR", __FUNCTION__);
-               ucc_fast_free(uccf);
-               return ret;
-       }
-
        /* Set UCC to fast type */
-       if ((ret = ucc_set_type(uf_info->ucc_num,
-                               (struct ucc_common *) (uf_regs),
-                               UCC_SPEED_TYPE_FAST))) {
-               printk(KERN_ERR "%s: cannot set UCC type", __FUNCTION__);
+       ret = ucc_set_type(uf_info->ucc_num, UCC_SPEED_TYPE_FAST);
+       if (ret) {
+               printk(KERN_ERR "%s: cannot set UCC type\n", __func__);
                ucc_fast_free(uccf);
                return ret;
        }
@@ -268,8 +268,9 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
        /* Allocate memory for Tx Virtual Fifo */
        uccf->ucc_fast_tx_virtual_fifo_base_offset =
            qe_muram_alloc(uf_info->utfs, UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT);
-       if (IS_MURAM_ERR(uccf->ucc_fast_tx_virtual_fifo_base_offset)) {
-               printk(KERN_ERR "%s: cannot allocate MURAM for TX FIFO", __FUNCTION__);
+       if (IS_ERR_VALUE(uccf->ucc_fast_tx_virtual_fifo_base_offset)) {
+               printk(KERN_ERR "%s: cannot allocate MURAM for TX FIFO\n",
+                       __func__);
                uccf->ucc_fast_tx_virtual_fifo_base_offset = 0;
                ucc_fast_free(uccf);
                return -ENOMEM;
@@ -280,8 +281,9 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
                qe_muram_alloc(uf_info->urfs +
                           UCC_FAST_RECEIVE_VIRTUAL_FIFO_SIZE_FUDGE_FACTOR,
                           UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT);
-       if (IS_MURAM_ERR(uccf->ucc_fast_rx_virtual_fifo_base_offset)) {
-               printk(KERN_ERR "%s: cannot allocate MURAM for RX FIFO", __FUNCTION__);
+       if (IS_ERR_VALUE(uccf->ucc_fast_rx_virtual_fifo_base_offset)) {
+               printk(KERN_ERR "%s: cannot allocate MURAM for RX FIFO\n",
+                       __func__);
                uccf->ucc_fast_rx_virtual_fifo_base_offset = 0;
                ucc_fast_free(uccf);
                return -ENOMEM;
@@ -311,8 +313,8 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
                if ((uf_info->rx_clock != QE_CLK_NONE) &&
                    ucc_set_qe_mux_rxtx(uf_info->ucc_num, uf_info->rx_clock,
                                        COMM_DIR_RX)) {
-                       printk(KERN_ERR "%s: illegal value for RX clock",
-                              __FUNCTION__);
+                       printk(KERN_ERR "%s: illegal value for RX clock\n",
+                              __func__);
                        ucc_fast_free(uccf);
                        return -EINVAL;
                }
@@ -320,8 +322,8 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
                if ((uf_info->tx_clock != QE_CLK_NONE) &&
                    ucc_set_qe_mux_rxtx(uf_info->ucc_num, uf_info->tx_clock,
                                        COMM_DIR_TX)) {
-                       printk(KERN_ERR "%s: illegal value for TX clock",
-                              __FUNCTION__);
+                       printk(KERN_ERR "%s: illegal value for TX clock\n",
+                              __func__);
                        ucc_fast_free(uccf);
                        return -EINVAL;
                }
@@ -340,6 +342,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
        *uccf_ret = uccf;
        return 0;
 }
+EXPORT_SYMBOL(ucc_fast_init);
 
 void ucc_fast_free(struct ucc_fast_private * uccf)
 {
@@ -354,3 +357,4 @@ void ucc_fast_free(struct ucc_fast_private * uccf)
 
        kfree(uccf);
 }
+EXPORT_SYMBOL(ucc_fast_free);