Commit 97e87f8e authored by Jiri Slaby's avatar Jiri Slaby Committed by Linus Torvalds

tty: cyclades, plx9060 casts cleanup

Remove ugly all-over-the-code casts of ctl_addr to 9060 space.
Add an union to the cyclades_card structure, which contains
a pointer to both 9050 and 9060 spaces.

The 9050 space layout is unknown, so let it still as a void
__iomem pointer.
Signed-off-by: default avatarJiri Slaby <jirislaby@gmail.com>
Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5ba5a5d2
...@@ -666,12 +666,10 @@ static void cy_send_xchar(struct tty_struct *tty, char ch); ...@@ -666,12 +666,10 @@ static void cy_send_xchar(struct tty_struct *tty, char ch);
#define IS_CYC_Z(card) ((card).num_chips == (unsigned int)-1) #define IS_CYC_Z(card) ((card).num_chips == (unsigned int)-1)
#define Z_FPGA_CHECK(card) \ #define Z_FPGA_CHECK(card) \
((readl(&((struct RUNTIME_9060 __iomem *) \ ((readl(&(card).ctl_addr.p9060->init_ctrl) & (1<<17)) != 0)
((card).ctl_addr))->init_ctrl) & (1<<17)) != 0)
#define ISZLOADED(card) (((ZO_V1 == readl(&((struct RUNTIME_9060 __iomem *) \ #define ISZLOADED(card) (((ZO_V1 == readl(&(card).ctl_addr.p9060->mail_box_0)) \
((card).ctl_addr))->mail_box_0)) || \ || Z_FPGA_CHECK(card)) && \
Z_FPGA_CHECK(card)) && \
(ZFIRM_ID == readl(&((struct FIRM_ID __iomem *) \ (ZFIRM_ID == readl(&((struct FIRM_ID __iomem *) \
((card).base_addr+ID_ADDRESS))->signature))) ((card).base_addr+ID_ADDRESS))->signature)))
...@@ -1400,14 +1398,12 @@ cyz_fetch_msg(struct cyclades_card *cinfo, ...@@ -1400,14 +1398,12 @@ cyz_fetch_msg(struct cyclades_card *cinfo,
zfw_ctrl = cinfo->base_addr + (readl(&firm_id->zfwctrl_addr) & 0xfffff); zfw_ctrl = cinfo->base_addr + (readl(&firm_id->zfwctrl_addr) & 0xfffff);
board_ctrl = &zfw_ctrl->board_ctrl; board_ctrl = &zfw_ctrl->board_ctrl;
loc_doorbell = readl(&((struct RUNTIME_9060 __iomem *) loc_doorbell = readl(&cinfo->ctl_addr.p9060->loc_doorbell);
(cinfo->ctl_addr))->loc_doorbell);
if (loc_doorbell) { if (loc_doorbell) {
*cmd = (char)(0xff & loc_doorbell); *cmd = (char)(0xff & loc_doorbell);
*channel = readl(&board_ctrl->fwcmd_channel); *channel = readl(&board_ctrl->fwcmd_channel);
*param = (__u32) readl(&board_ctrl->fwcmd_param); *param = (__u32) readl(&board_ctrl->fwcmd_param);
cy_writel(&((struct RUNTIME_9060 __iomem *)(cinfo->ctl_addr))-> cy_writel(&cinfo->ctl_addr.p9060->loc_doorbell, 0xffffffff);
loc_doorbell, 0xffffffff);
return 1; return 1;
} }
return 0; return 0;
...@@ -1431,8 +1427,7 @@ cyz_issue_cmd(struct cyclades_card *cinfo, ...@@ -1431,8 +1427,7 @@ cyz_issue_cmd(struct cyclades_card *cinfo,
board_ctrl = &zfw_ctrl->board_ctrl; board_ctrl = &zfw_ctrl->board_ctrl;
index = 0; index = 0;
pci_doorbell = pci_doorbell = &cinfo->ctl_addr.p9060->pci_doorbell;
&((struct RUNTIME_9060 __iomem *)(cinfo->ctl_addr))->pci_doorbell;
while ((readl(pci_doorbell) & 0xff) != 0) { while ((readl(pci_doorbell) & 0xff) != 0) {
if (index++ == 1000) if (index++ == 1000)
return (int)(readl(pci_doorbell) & 0xff); return (int)(readl(pci_doorbell) & 0xff);
...@@ -1635,8 +1630,7 @@ static void cyz_handle_cmd(struct cyclades_card *cinfo) ...@@ -1635,8 +1630,7 @@ static void cyz_handle_cmd(struct cyclades_card *cinfo)
zfw_ctrl = cinfo->base_addr + (readl(&firm_id->zfwctrl_addr) & 0xfffff); zfw_ctrl = cinfo->base_addr + (readl(&firm_id->zfwctrl_addr) & 0xfffff);
board_ctrl = &zfw_ctrl->board_ctrl; board_ctrl = &zfw_ctrl->board_ctrl;
fw_ver = readl(&board_ctrl->fw_version); fw_ver = readl(&board_ctrl->fw_version);
hw_ver = readl(&((struct RUNTIME_9060 __iomem *)(cinfo->ctl_addr))-> hw_ver = readl(&cinfo->ctl_addr.p9060->mail_box_0);
mail_box_0);
while (cyz_fetch_msg(cinfo, &channel, &cmd, &param) == 1) { while (cyz_fetch_msg(cinfo, &channel, &cmd, &param) == 1) {
special_count = 0; special_count = 0;
...@@ -2394,8 +2388,8 @@ static int cy_open(struct tty_struct *tty, struct file *filp) ...@@ -2394,8 +2388,8 @@ static int cy_open(struct tty_struct *tty, struct file *filp)
struct FIRM_ID __iomem *firm_id = cinfo->base_addr + ID_ADDRESS; struct FIRM_ID __iomem *firm_id = cinfo->base_addr + ID_ADDRESS;
if (!ISZLOADED(*cinfo)) { if (!ISZLOADED(*cinfo)) {
if (((ZE_V1 == readl(&((struct RUNTIME_9060 __iomem *) if (((ZE_V1 == readl(&cinfo->ctl_addr.p9060->
(cinfo->ctl_addr))->mail_box_0)) && mail_box_0)) &&
Z_FPGA_CHECK(*cinfo)) && Z_FPGA_CHECK(*cinfo)) &&
(ZFIRM_HLT == readl( (ZFIRM_HLT == readl(
&firm_id->signature))) { &firm_id->signature))) {
...@@ -2417,6 +2411,7 @@ static int cy_open(struct tty_struct *tty, struct file *filp) ...@@ -2417,6 +2411,7 @@ static int cy_open(struct tty_struct *tty, struct file *filp)
if (!cinfo->intr_enabled) { if (!cinfo->intr_enabled) {
struct ZFW_CTRL __iomem *zfw_ctrl; struct ZFW_CTRL __iomem *zfw_ctrl;
struct BOARD_CTRL __iomem *board_ctrl; struct BOARD_CTRL __iomem *board_ctrl;
u16 intr;
zfw_ctrl = cinfo->base_addr + zfw_ctrl = cinfo->base_addr +
(readl(&firm_id->zfwctrl_addr) & (readl(&firm_id->zfwctrl_addr) &
...@@ -2425,8 +2420,10 @@ static int cy_open(struct tty_struct *tty, struct file *filp) ...@@ -2425,8 +2420,10 @@ static int cy_open(struct tty_struct *tty, struct file *filp)
board_ctrl = &zfw_ctrl->board_ctrl; board_ctrl = &zfw_ctrl->board_ctrl;
/* Enable interrupts on the PLX chip */ /* Enable interrupts on the PLX chip */
cy_writew(cinfo->ctl_addr + 0x68, intr = readw(&cinfo->ctl_addr.p9060->
readw(cinfo->ctl_addr + 0x68) | 0x0900); intr_ctrl_stat) | 0x0900;
cy_writew(&cinfo->ctl_addr.p9060->
intr_ctrl_stat, intr);
/* Enable interrupts on the FW */ /* Enable interrupts on the FW */
retval = cyz_issue_cmd(cinfo, 0, retval = cyz_issue_cmd(cinfo, 0,
C_CM_IRQ_ENBL, 0L); C_CM_IRQ_ENBL, 0L);
...@@ -4347,8 +4344,7 @@ static int __devinit cy_init_card(struct cyclades_card *cinfo) ...@@ -4347,8 +4344,7 @@ static int __devinit cy_init_card(struct cyclades_card *cinfo)
spin_lock_init(&cinfo->card_lock); spin_lock_init(&cinfo->card_lock);
if (IS_CYC_Z(*cinfo)) { /* Cyclades-Z */ if (IS_CYC_Z(*cinfo)) { /* Cyclades-Z */
mailbox = readl(&((struct RUNTIME_9060 __iomem *) mailbox = readl(&cinfo->ctl_addr.p9060->mail_box_0);
cinfo->ctl_addr)->mail_box_0);
nports = (mailbox == ZE_V1) ? ZE_V1_NPORTS : 8; nports = (mailbox == ZE_V1) ? ZE_V1_NPORTS : 8;
cinfo->intr_enabled = 0; cinfo->intr_enabled = 0;
cinfo->nports = 0; /* Will be correctly set later, after cinfo->nports = 0; /* Will be correctly set later, after
...@@ -4613,7 +4609,7 @@ static int __init cy_detect_isa(void) ...@@ -4613,7 +4609,7 @@ static int __init cy_detect_isa(void)
/* set cy_card */ /* set cy_card */
cy_card[j].base_addr = cy_isa_address; cy_card[j].base_addr = cy_isa_address;
cy_card[j].ctl_addr = NULL; cy_card[j].ctl_addr.p9050 = NULL;
cy_card[j].irq = (int)cy_isa_irq; cy_card[j].irq = (int)cy_isa_irq;
cy_card[j].bus_index = 0; cy_card[j].bus_index = 0;
cy_card[j].first_line = cy_next_channel; cy_card[j].first_line = cy_next_channel;
...@@ -5013,7 +5009,8 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev, ...@@ -5013,7 +5009,8 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev,
} }
/* Disable interrupts on the PLX before resetting it */ /* Disable interrupts on the PLX before resetting it */
cy_writew(addr0 + 0x68, readw(addr0 + 0x68) & ~0x0900); cy_writew(&ctl_addr->intr_ctrl_stat,
readw(&ctl_addr->intr_ctrl_stat) & ~0x0900);
plx_init(pdev, irq, addr0); plx_init(pdev, irq, addr0);
...@@ -5109,7 +5106,7 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev, ...@@ -5109,7 +5106,7 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev,
/* set cy_card */ /* set cy_card */
cy_card[card_no].base_addr = addr2; cy_card[card_no].base_addr = addr2;
cy_card[card_no].ctl_addr = addr0; cy_card[card_no].ctl_addr.p9050 = addr0;
cy_card[card_no].irq = irq; cy_card[card_no].irq = irq;
cy_card[card_no].bus_index = 1; cy_card[card_no].bus_index = 1;
cy_card[card_no].first_line = cy_next_channel; cy_card[card_no].first_line = cy_next_channel;
...@@ -5125,17 +5122,20 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev, ...@@ -5125,17 +5122,20 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev,
plx_ver = readb(addr2 + CyPLX_VER) & 0x0f; plx_ver = readb(addr2 + CyPLX_VER) & 0x0f;
switch (plx_ver) { switch (plx_ver) {
case PLX_9050: case PLX_9050:
cy_writeb(addr0 + 0x4c, 0x43); cy_writeb(addr0 + 0x4c, 0x43);
break; break;
case PLX_9060: case PLX_9060:
case PLX_9080: case PLX_9080:
default: /* Old boards, use PLX_9060 */ default: /* Old boards, use PLX_9060 */
plx_init(pdev, irq, addr0); {
cy_writew(addr0 + 0x68, readw(addr0 + 0x68) | 0x0900); struct RUNTIME_9060 __iomem *ctl_addr = addr0;
plx_init(pdev, irq, ctl_addr);
cy_writew(&ctl_addr->intr_ctrl_stat,
readw(&ctl_addr->intr_ctrl_stat) | 0x0900);
break; break;
} }
}
} }
dev_info(&pdev->dev, "%s/PCI #%d found: %d channels starting from " dev_info(&pdev->dev, "%s/PCI #%d found: %d channels starting from "
...@@ -5168,17 +5168,18 @@ static void __devexit cy_pci_remove(struct pci_dev *pdev) ...@@ -5168,17 +5168,18 @@ static void __devexit cy_pci_remove(struct pci_dev *pdev)
/* non-Z with old PLX */ /* non-Z with old PLX */
if (!IS_CYC_Z(*cinfo) && (readb(cinfo->base_addr + CyPLX_VER) & 0x0f) == if (!IS_CYC_Z(*cinfo) && (readb(cinfo->base_addr + CyPLX_VER) & 0x0f) ==
PLX_9050) PLX_9050)
cy_writeb(cinfo->ctl_addr + 0x4c, 0); cy_writeb(cinfo->ctl_addr.p9050 + 0x4c, 0);
else else
#ifndef CONFIG_CYZ_INTR #ifndef CONFIG_CYZ_INTR
if (!IS_CYC_Z(*cinfo)) if (!IS_CYC_Z(*cinfo))
#endif #endif
cy_writew(cinfo->ctl_addr + 0x68, cy_writew(&cinfo->ctl_addr.p9060->intr_ctrl_stat,
readw(cinfo->ctl_addr + 0x68) & ~0x0900); readw(&cinfo->ctl_addr.p9060->intr_ctrl_stat) &
~0x0900);
iounmap(cinfo->base_addr); iounmap(cinfo->base_addr);
if (cinfo->ctl_addr) if (cinfo->ctl_addr.p9050)
iounmap(cinfo->ctl_addr); iounmap(cinfo->ctl_addr.p9050);
if (cinfo->irq if (cinfo->irq
#ifndef CONFIG_CYZ_INTR #ifndef CONFIG_CYZ_INTR
&& !IS_CYC_Z(*cinfo) && !IS_CYC_Z(*cinfo)
...@@ -5373,8 +5374,8 @@ static void __exit cy_cleanup_module(void) ...@@ -5373,8 +5374,8 @@ static void __exit cy_cleanup_module(void)
/* clear interrupt */ /* clear interrupt */
cy_writeb(card->base_addr + Cy_ClrIntr, 0); cy_writeb(card->base_addr + Cy_ClrIntr, 0);
iounmap(card->base_addr); iounmap(card->base_addr);
if (card->ctl_addr) if (card->ctl_addr.p9050)
iounmap(card->ctl_addr); iounmap(card->ctl_addr.p9050);
if (card->irq if (card->irq
#ifndef CONFIG_CYZ_INTR #ifndef CONFIG_CYZ_INTR
&& !IS_CYC_Z(*card) && !IS_CYC_Z(*card)
......
...@@ -507,16 +507,19 @@ struct ZFW_CTRL { ...@@ -507,16 +507,19 @@ struct ZFW_CTRL {
/* Per card data structure */ /* Per card data structure */
struct cyclades_card { struct cyclades_card {
void __iomem *base_addr; void __iomem *base_addr;
void __iomem *ctl_addr; union {
int irq; void __iomem *p9050;
unsigned int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */ struct RUNTIME_9060 __iomem *p9060;
unsigned int first_line; /* minor number of first channel on card */ } ctl_addr;
unsigned int nports; /* Number of ports in the card */ int irq;
int bus_index; /* address shift - 0 for ISA, 1 for PCI */ unsigned int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */
int intr_enabled; /* FW Interrupt flag - 0 disabled, 1 enabled */ unsigned int first_line; /* minor number of first channel on card */
spinlock_t card_lock; unsigned int nports; /* Number of ports in the card */
struct cyclades_port *ports; int bus_index; /* address shift - 0 for ISA, 1 for PCI */
int intr_enabled; /* FW Interrupt flag - 0 disabled, 1 enabled */
spinlock_t card_lock;
struct cyclades_port *ports;
}; };
/*************************************** /***************************************
......
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