Revision 2d48377a hw/serial.c
b/hw/serial.c | ||
---|---|---|
825 | 825 |
serial_ioport_write(s, addr >> s->it_shift, value & 0xFF); |
826 | 826 |
} |
827 | 827 |
|
828 |
static uint32_t serial_mm_readw(void *opaque, target_phys_addr_t addr) |
|
828 |
static uint32_t serial_mm_readw_be(void *opaque, target_phys_addr_t addr)
|
|
829 | 829 |
{ |
830 | 830 |
SerialState *s = opaque; |
831 | 831 |
uint32_t val; |
832 | 832 |
|
833 | 833 |
val = serial_ioport_read(s, addr >> s->it_shift) & 0xFFFF; |
834 |
#ifdef TARGET_WORDS_BIGENDIAN |
|
835 | 834 |
val = bswap16(val); |
836 |
#endif |
|
837 | 835 |
return val; |
838 | 836 |
} |
839 | 837 |
|
840 |
static void serial_mm_writew(void *opaque, target_phys_addr_t addr, |
|
841 |
uint32_t value) |
|
838 |
static uint32_t serial_mm_readw_le(void *opaque, target_phys_addr_t addr) |
|
842 | 839 |
{ |
843 | 840 |
SerialState *s = opaque; |
844 |
#ifdef TARGET_WORDS_BIGENDIAN |
|
841 |
uint32_t val; |
|
842 |
|
|
843 |
val = serial_ioport_read(s, addr >> s->it_shift) & 0xFFFF; |
|
844 |
return val; |
|
845 |
} |
|
846 |
|
|
847 |
static void serial_mm_writew_be(void *opaque, target_phys_addr_t addr, |
|
848 |
uint32_t value) |
|
849 |
{ |
|
850 |
SerialState *s = opaque; |
|
851 |
|
|
845 | 852 |
value = bswap16(value); |
846 |
#endif |
|
847 | 853 |
serial_ioport_write(s, addr >> s->it_shift, value & 0xFFFF); |
848 | 854 |
} |
849 | 855 |
|
850 |
static uint32_t serial_mm_readl(void *opaque, target_phys_addr_t addr) |
|
856 |
static void serial_mm_writew_le(void *opaque, target_phys_addr_t addr, |
|
857 |
uint32_t value) |
|
858 |
{ |
|
859 |
SerialState *s = opaque; |
|
860 |
|
|
861 |
serial_ioport_write(s, addr >> s->it_shift, value & 0xFFFF); |
|
862 |
} |
|
863 |
|
|
864 |
static uint32_t serial_mm_readl_be(void *opaque, target_phys_addr_t addr) |
|
851 | 865 |
{ |
852 | 866 |
SerialState *s = opaque; |
853 | 867 |
uint32_t val; |
854 | 868 |
|
855 | 869 |
val = serial_ioport_read(s, addr >> s->it_shift); |
856 |
#ifdef TARGET_WORDS_BIGENDIAN |
|
857 | 870 |
val = bswap32(val); |
858 |
#endif |
|
859 | 871 |
return val; |
860 | 872 |
} |
861 | 873 |
|
862 |
static void serial_mm_writel(void *opaque, target_phys_addr_t addr, |
|
863 |
uint32_t value) |
|
874 |
static uint32_t serial_mm_readl_le(void *opaque, target_phys_addr_t addr) |
|
875 |
{ |
|
876 |
SerialState *s = opaque; |
|
877 |
uint32_t val; |
|
878 |
|
|
879 |
val = serial_ioport_read(s, addr >> s->it_shift); |
|
880 |
return val; |
|
881 |
} |
|
882 |
|
|
883 |
static void serial_mm_writel_be(void *opaque, target_phys_addr_t addr, |
|
884 |
uint32_t value) |
|
864 | 885 |
{ |
865 | 886 |
SerialState *s = opaque; |
866 |
#ifdef TARGET_WORDS_BIGENDIAN |
|
887 |
|
|
867 | 888 |
value = bswap32(value); |
868 |
#endif |
|
869 | 889 |
serial_ioport_write(s, addr >> s->it_shift, value); |
870 | 890 |
} |
871 | 891 |
|
872 |
static CPUReadMemoryFunc * const serial_mm_read[] = { |
|
892 |
static void serial_mm_writel_le(void *opaque, target_phys_addr_t addr, |
|
893 |
uint32_t value) |
|
894 |
{ |
|
895 |
SerialState *s = opaque; |
|
896 |
|
|
897 |
serial_ioport_write(s, addr >> s->it_shift, value); |
|
898 |
} |
|
899 |
|
|
900 |
static CPUReadMemoryFunc * const serial_mm_read_be[] = { |
|
873 | 901 |
&serial_mm_readb, |
874 |
&serial_mm_readw, |
|
875 |
&serial_mm_readl, |
|
902 |
&serial_mm_readw_be,
|
|
903 |
&serial_mm_readl_be,
|
|
876 | 904 |
}; |
877 | 905 |
|
878 |
static CPUWriteMemoryFunc * const serial_mm_write[] = { |
|
906 |
static CPUWriteMemoryFunc * const serial_mm_write_be[] = {
|
|
879 | 907 |
&serial_mm_writeb, |
880 |
&serial_mm_writew, |
|
881 |
&serial_mm_writel, |
|
908 |
&serial_mm_writew_be, |
|
909 |
&serial_mm_writel_be, |
|
910 |
}; |
|
911 |
|
|
912 |
static CPUReadMemoryFunc * const serial_mm_read_le[] = { |
|
913 |
&serial_mm_readb, |
|
914 |
&serial_mm_readw_le, |
|
915 |
&serial_mm_readl_le, |
|
916 |
}; |
|
917 |
|
|
918 |
static CPUWriteMemoryFunc * const serial_mm_write_le[] = { |
|
919 |
&serial_mm_writeb, |
|
920 |
&serial_mm_writew_le, |
|
921 |
&serial_mm_writel_le, |
|
882 | 922 |
}; |
883 | 923 |
|
884 | 924 |
SerialState *serial_mm_init (target_phys_addr_t base, int it_shift, |
885 | 925 |
qemu_irq irq, int baudbase, |
886 |
CharDriverState *chr, int ioregister) |
|
926 |
CharDriverState *chr, int ioregister, |
|
927 |
int be) |
|
887 | 928 |
{ |
888 | 929 |
SerialState *s; |
889 | 930 |
int s_io_memory; |
... | ... | |
899 | 940 |
vmstate_register(base, &vmstate_serial, s); |
900 | 941 |
|
901 | 942 |
if (ioregister) { |
902 |
s_io_memory = cpu_register_io_memory(serial_mm_read, |
|
903 |
serial_mm_write, s); |
|
943 |
if (be) { |
|
944 |
s_io_memory = cpu_register_io_memory(serial_mm_read_be, |
|
945 |
serial_mm_write_be, s); |
|
946 |
} else { |
|
947 |
s_io_memory = cpu_register_io_memory(serial_mm_read_le, |
|
948 |
serial_mm_write_le, s); |
|
949 |
} |
|
904 | 950 |
cpu_register_physical_memory(base, 8 << it_shift, s_io_memory); |
905 | 951 |
} |
906 | 952 |
serial_update_msl(s); |
Also available in: Unified diff