diff options
author | Dominik Brodowski <linux@dominikbrodowski.net> | 2010-07-24 11:23:51 -0400 |
---|---|---|
committer | Dominik Brodowski <linux@dominikbrodowski.net> | 2010-08-03 03:04:11 -0400 |
commit | 90abdc3b973229bae98dd96649d9f7106cc177a4 (patch) | |
tree | 5c1a7a131b65560dd73b5103118d8c7631bd76a4 /drivers/net/pcmcia/xirc2ps_cs.c | |
parent | 9a017a910346afd88ec2e065989903bf211a7d37 (diff) |
pcmcia: do not use io_req_t when calling pcmcia_request_io()
Instead of io_req_t, drivers are now requested to fill out
struct pcmcia_device *p_dev->resource[0,1] for up to two ioport
ranges. After a call to pcmcia_request_io(), the ports found there
are reserved, after calling pcmcia_request_configuration(), they may
be used.
CC: netdev@vger.kernel.org
CC: linux-wireless@vger.kernel.org
CC: linux-ide@vger.kernel.org
CC: linux-usb@vger.kernel.org
CC: laforge@gnumonks.org
CC: linux-mtd@lists.infradead.org
CC: alsa-devel@alsa-project.org
CC: linux-serial@vger.kernel.org
CC: Michael Buesch <mb@bu3sch.de>
Acked-by: Marcel Holtmann <marcel@holtmann.org> (for drivers/bluetooth/)
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'drivers/net/pcmcia/xirc2ps_cs.c')
-rw-r--r-- | drivers/net/pcmcia/xirc2ps_cs.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c index 034920b459d1..8fb0eb1dc341 100644 --- a/drivers/net/pcmcia/xirc2ps_cs.c +++ b/drivers/net/pcmcia/xirc2ps_cs.c | |||
@@ -677,9 +677,9 @@ xirc2ps_config_modem(struct pcmcia_device *p_dev, | |||
677 | 677 | ||
678 | if (cf->io.nwin > 0 && (cf->io.win[0].base & 0xf) == 8) { | 678 | if (cf->io.nwin > 0 && (cf->io.win[0].base & 0xf) == 8) { |
679 | for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) { | 679 | for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) { |
680 | p_dev->io.BasePort2 = cf->io.win[0].base; | 680 | p_dev->resource[1]->start = cf->io.win[0].base; |
681 | p_dev->io.BasePort1 = ioaddr; | 681 | p_dev->resource[0]->start = ioaddr; |
682 | if (!pcmcia_request_io(p_dev, &p_dev->io)) | 682 | if (!pcmcia_request_io(p_dev)) |
683 | return 0; | 683 | return 0; |
684 | } | 684 | } |
685 | } | 685 | } |
@@ -696,11 +696,11 @@ xirc2ps_config_check(struct pcmcia_device *p_dev, | |||
696 | int *pass = priv_data; | 696 | int *pass = priv_data; |
697 | 697 | ||
698 | if (cf->io.nwin > 0 && (cf->io.win[0].base & 0xf) == 8) { | 698 | if (cf->io.nwin > 0 && (cf->io.win[0].base & 0xf) == 8) { |
699 | p_dev->io.BasePort2 = cf->io.win[0].base; | 699 | p_dev->resource[1]->start = cf->io.win[0].base; |
700 | p_dev->io.BasePort1 = p_dev->io.BasePort2 | 700 | p_dev->resource[0]->start = p_dev->resource[1]->start |
701 | + (*pass ? (cf->index & 0x20 ? -24:8) | 701 | + (*pass ? (cf->index & 0x20 ? -24:8) |
702 | : (cf->index & 0x20 ? 8:-24)); | 702 | : (cf->index & 0x20 ? 8:-24)); |
703 | if (!pcmcia_request_io(p_dev, &p_dev->io)) | 703 | if (!pcmcia_request_io(p_dev)) |
704 | return 0; | 704 | return 0; |
705 | } | 705 | } |
706 | return -ENODEV; | 706 | return -ENODEV; |
@@ -807,8 +807,7 @@ xirc2ps_config(struct pcmcia_device * link) | |||
807 | goto failure; | 807 | goto failure; |
808 | } | 808 | } |
809 | 809 | ||
810 | link->io.IOAddrLines =10; | 810 | link->resource[0]->flags |= IO_DATA_PATH_WIDTH_16; |
811 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_16; | ||
812 | if (local->modem) { | 811 | if (local->modem) { |
813 | int pass; | 812 | int pass; |
814 | 813 | ||
@@ -816,16 +815,16 @@ xirc2ps_config(struct pcmcia_device * link) | |||
816 | link->conf.Attributes |= CONF_ENABLE_SPKR; | 815 | link->conf.Attributes |= CONF_ENABLE_SPKR; |
817 | link->conf.Status |= CCSR_AUDIO_ENA; | 816 | link->conf.Status |= CCSR_AUDIO_ENA; |
818 | } | 817 | } |
819 | link->io.NumPorts2 = 8; | 818 | link->resource[1]->end = 8; |
820 | link->io.Attributes2 = IO_DATA_PATH_WIDTH_8; | 819 | link->resource[1]->flags |= IO_DATA_PATH_WIDTH_8; |
821 | if (local->dingo) { | 820 | if (local->dingo) { |
822 | /* Take the Modem IO port from the CIS and scan for a free | 821 | /* Take the Modem IO port from the CIS and scan for a free |
823 | * Ethernet port */ | 822 | * Ethernet port */ |
824 | link->io.NumPorts1 = 16; /* no Mako stuff anymore */ | 823 | link->resource[0]->end = 16; /* no Mako stuff anymore */ |
825 | if (!pcmcia_loop_config(link, xirc2ps_config_modem, NULL)) | 824 | if (!pcmcia_loop_config(link, xirc2ps_config_modem, NULL)) |
826 | goto port_found; | 825 | goto port_found; |
827 | } else { | 826 | } else { |
828 | link->io.NumPorts1 = 18; | 827 | link->resource[0]->end = 18; |
829 | /* We do 2 passes here: The first one uses the regular mapping and | 828 | /* We do 2 passes here: The first one uses the regular mapping and |
830 | * the second tries again, thereby considering that the 32 ports are | 829 | * the second tries again, thereby considering that the 32 ports are |
831 | * mirrored every 32 bytes. Actually we use a mirrored port for | 830 | * mirrored every 32 bytes. Actually we use a mirrored port for |
@@ -840,14 +839,15 @@ xirc2ps_config(struct pcmcia_device * link) | |||
840 | } | 839 | } |
841 | printk(KNOT_XIRC "no ports available\n"); | 840 | printk(KNOT_XIRC "no ports available\n"); |
842 | } else { | 841 | } else { |
843 | link->io.NumPorts1 = 16; | 842 | link->io_lines = 10; |
843 | link->resource[0]->end = 16; | ||
844 | for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) { | 844 | for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) { |
845 | link->io.BasePort1 = ioaddr; | 845 | link->resource[0]->start = ioaddr; |
846 | if (!(err=pcmcia_request_io(link, &link->io))) | 846 | if (!(err = pcmcia_request_io(link))) |
847 | goto port_found; | 847 | goto port_found; |
848 | } | 848 | } |
849 | link->io.BasePort1 = 0; /* let CS decide */ | 849 | link->resource[0]->start = 0; /* let CS decide */ |
850 | if ((err=pcmcia_request_io(link, &link->io))) | 850 | if ((err = pcmcia_request_io(link))) |
851 | goto config_error; | 851 | goto config_error; |
852 | } | 852 | } |
853 | port_found: | 853 | port_found: |