Hi Michael,
arch/m68k/include/asm/io_mm.h:
| #define enec_isa_read_base 0xfffa0000
| #define enec_isa_write_base 0xfffb0000
|
| #define ENEC_ISA_IO_B(ioaddr) (enec_isa_read_base+((((unsigned
long)(ioaddr))&0x1F)<<9))
| #define ENEC_ISA_IO_W(ioaddr) (enec_isa_read_base+((((unsigned
long)(ioaddr))&0x1F)<<9))
| #define ENEC_ISA_MEM_B(madr) (enec_isa_read_base+((((unsigned
long)(madr))&0x1F)<<9))
| #define ENEC_ISA_MEM_W(madr) (enec_isa_read_base+((((unsigned
long)(madr))&0x1F)<<9))
So ISA memory space accesses (isa_readX()) are implemented the same as ISA I/O
space accesses? That can't work. Or are they not supported?
If they're not supported, I think it's better to implement dummies instead.
arch/m68k/include/asm/raw_io.h
| /*
| * Atari ROM port (cartridge port) ISA adapter, used for the EtherNEC NE2000
| * network card driver.
| * The ISA adapter connects address lines A9-A13 to ISA address lines A0-A4,
That's handled via isa_[im]t[bwl](), which uses ENEC_ISA_{IO,MEM}_[BW]
internally. OK
| * and hardwires the rest of the ISA addresses for a base address of 0x300.
| *
| * Data lines D8-D15 are connected to ISA data lines D0-D7 for reading.
| * For writes, address lines A1-A8 are latched to ISA data lines D0-D7
| * (meaning the bit pattern on A1-A8 can be read back as byte).
So writes are done using reads.
| *
| * Reads and writes are byte only.
| */
Hence 8-bit access only, ...
|
| #if defined(CONFIG_ATARI_ROM_ISA)
| #define rom_in_8(addr) \
| ({ u16 __v = (*(__force volatile u16 *) (addr)); __v >>= 8; __v; })
| #define rom_in_be16(addr) \
| ({ u16 __v = (*(__force volatile u16 *) (addr)); __v >>= 8; __v; })
| #define rom_in_be32(addr) \
| ({ u32 __v = (*(__force volatile u32 *) (addr)); __v >>= 8; __v; })
| #define rom_in_le16(addr) \
| ({ u16 __v = le16_to_cpu(*(__force volatile u16 *) (addr)); __v >>=
8; __v; })
| #define rom_in_le32(addr) \
| ({ u32 __v = le32_to_cpu(*(__force volatile u32 *) (addr)); __v >>=
8; __v; })
So the above four can't work? Remove them?
| #define rom_out_8(addr, b) ({u8 __w, __v = (b); __w = ((*(__force
volatile u8 *) ((addr) + 0x10000 + (__v<<1)))); })
The 0x10000 is due to the different bases for reading and writing
(i.e. enec_isa_write_base - enec_isa_read_base), right?
| #define rom_out_be16(addr, w) ({u16 __w, __v = (w); __w = ((*(__force
volatile u16 *) ((addr) + 0x10000 + (__v<<1)))); })
| #define rom_out_be32(addr, l) ({u32 __w, __v = (l); __w = ((*(__force
volatile u32 *) ((addr) + 0x10000 + (__v<<1)))); })
| #define rom_out_le16(addr, w) ({u16 __w, __v = cpu_to_le16(w); __w =
((*(__force volatile u16 *) ((addr) + 0x10000 + (__v<<1)))); })
| #define rom_out_le32(addr, l) ({u32 __w, __v = cpu_to_le32(l); __w =
((*(__force volatile u32 *) ((addr) + 0x10000 + (__v<<1)))); })
The above four also can't work. Remove them?
| #define raw_rom_inb rom_in_8
| #define raw_rom_inw rom_in_be16
| #define raw_rom_inl rom_in_be32
The above two also can't work. Remove them?
| #define raw_rom_outb(val, port) rom_out_8((port), (val))
| #define raw_rom_outw(val, port) rom_out_be16((port), (val))
| #define raw_rom_outl(val, port) rom_out_be32((port), (val))
The above two also can't work. Remove them?
| #endif /* CONFIG_ATARI_ROM_ISA */
If all of these are removed, the CONFIG_ATARI_ROM_ISA sections in
arch/m68k/include/asm/io_mm.h can be simplified a lot, too.
Does all of this make sense?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html