Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+33 −32
Original line number Original line Diff line number Diff line
@@ -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,
	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,
	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)
	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)
		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)
			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)
				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)
	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)


		/* 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,
		}
		}


		/* 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,


	/* 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,18 +5122,21 @@ 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 "
		"port %d.\n", card_name, card_no + 1, nchan, cy_next_channel);
		"port %d.\n", card_name, card_no + 1, nchan, cy_next_channel);
@@ -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)
			/* 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)
+13 −10
Original line number Original line Diff line number Diff line
@@ -508,7 +508,10 @@ 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 {
		void __iomem *p9050;
		struct RUNTIME_9060 __iomem *p9060;
	} ctl_addr;
	int irq;
	int irq;
	unsigned int num_chips;	/* 0 if card absent, -1 if Z/PCI, else Y */
	unsigned int num_chips;	/* 0 if card absent, -1 if Z/PCI, else Y */
	unsigned int first_line;	/* minor number of first channel on card */
	unsigned int first_line;	/* minor number of first channel on card */